我是一名有用的助手,可以翻译文本。
我刚开始学习编程,所以如果我的问题很傻,请原谅。我已经尝试了两天以上来解决这个问题,但是在网上找不到答案,所以我需要你的帮助。提前感谢你。
所以,我正在尝试用Java重新创造Parchisi游戏。我想创建一个方法,每当玩家掷骰子并得到数字“5”时,在特定位置放置一个计数器。该计数器具有自己的类,即:
问题在于,当从方法外部调用pintarficha()方法时(例如,在我的某个类的实例化中),它能正常工作并绘制计数器,但是当我将其放置在任何方法内部时,PaintComponent方法不会被执行,我无法理解为什么。
这里是一个例子:
但是在这里它不起作用:
感谢您的帮助。
我刚开始学习编程,所以如果我的问题很傻,请原谅。我已经尝试了两天以上来解决这个问题,但是在网上找不到答案,所以我需要你的帮助。提前感谢你。
所以,我正在尝试用Java重新创造Parchisi游戏。我想创建一个方法,每当玩家掷骰子并得到数字“5”时,在特定位置放置一个计数器。该计数器具有自己的类,即:
package parchis;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Ficha extends JPanel
{
public static int x;
public static int y;
public Image imagenficha;
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println("Ejecutándose función de pintura de ficha");
g.drawImage(imagenficha,x,y,this);
g.setColor(Color.RED);
g.fillRect(0,0,20,20);
}
Ficha(int color, int locx, int locy, int ancho, int alto){
this.setSize(60,60);
System.out.println("El color es el "+Servidor.turno);
this.setBounds(locx,locy,ancho,alto);
x=locx;
y=locy;
this.setVisible(true);
}
通过调用此方法,将检查器放置在JFrame上:
public void pintarficha(){
Ficha ficha = new Ficha(Servidor.turno,40,40,100,100);
jframe.getContentPane().add(ficha);
Refrescar();
}
刷新:
public static void Refrescar(){
jpanel.add(jlabel);
jframe.add(jpanel);
jframe.pack();
}
问题在于,当从方法外部调用pintarficha()方法时(例如,在我的某个类的实例化中),它能正常工作并绘制计数器,但是当我将其放置在任何方法内部时,PaintComponent方法不会被执行,我无法理解为什么。
这里是一个例子:
package parchis;
public class Administradordereglas {
Administradordereglas(){
********** Menu.menu.pintarficha(); ****************
}
void juegodebots(int jugador){
System.out.println("LLAMADA A JUEGO DE BOTS");
int valoraañadiralasposiciones;
valoraañadiralasposiciones= Ventanadeordenes.dado.Tiraeldado();
if(valoraañadiralasposiciones==5){
System.out.println("Se ha sacado un 5, procedo a crear una nueva ficha");
}
Parchis.servidor.Pasarturno();
}
}
但是在这里它不起作用:
package parchis;
public class Administradordereglas {
Administradordereglas(){
}
void juegodebots(int jugador) {
System.out.println("LLAMADA A JUEGO DE BOTS");
int valoraañadiralasposiciones;
valoraañadiralasposiciones= Ventanadeordenes.dado.Tiraeldado();
if(valoraañadiralasposiciones==5){
**************This message appears in the console:******************
System.out.println("Se ha sacado un 5, procedo a crear una nueva ficha");
*****************Menu.menu.pintarficha();*************************
}
Parchis.servidor.Pasarturno();
}
}
感谢您的帮助。
paintComponent(...)
方法具有protected
访问限定符而不是public
:-) 尽管如此,还是给这个问题点赞。 - nIcE cOw