3

私はプログラミングの方法を学び始めたばかりなので、私の質問がばかげているならすみません。私はこの問題の解決策を見つけるために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();
    }
}

ご協力いただきありがとうございます。

4

1 に答える 1

1

Refrescar メソッドに repaint() を追加できますか。

public void refrescar() {

    jpanel.add(jlabel);
    jframe.add(jpanel);
    jframe.pack();
    jframe.repaint();
}
于 2012-07-14T14:57:41.840 に答える