私はプログラミングの方法を学び始めたばかりなので、私の質問がばかげているならすみません。私はこの問題の解決策を見つけるために2日以上努力してきましたが、ネット上でそれを見つけることができないので、あなたの助けが必要です。前もって感謝します。
そこで、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();
}
Refrescar:
public static void Refrescar(){
jpanel.add(jlabel);
jframe.add(jpanel);
jframe.pack();
}
問題は、メソッドpintarficha()がメソッドの外部から呼び出された場合(つまり、私のクラスの1つのインスタンス化で)、正しく機能し、カウンターをペイントしますが、メソッドの内部に配置すると、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();
}
}
ご協力いただきありがとうございます。