我剛剛開始學習如何編程,所以如果我的問題很愚蠢,請原諒我。我一直在嘗試兩天以上找到解決這個問題的方法,但我無法通過網絡找到它,所以我需要你的幫助。提前致謝。PaintComponent不被調用
所以,我試圖在Java中重新創建Parchisi遊戲。我想創建一種方法,在每次玩家擲骰子並獲得第五個結果時將計數器放置在特定位置。 檯面上有其自己的類,即:
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();
}
問題
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當方法pintarficha()從一個方法的外部被調用時(IE在我的一個類的實例化中),它可以正常工作並且繪製計數器,但是當我把它放在任何方法的內部時,Pa intComponent沒有被執行,我不明白爲什麼。
這裏它的工作原理:
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();
}
}
感謝您的幫助。
什麼是包含在Pasarturno方法中?最終你需要在Fischa組件上調用repaint()。 – Reimeus 2012-07-14 14:09:14
Pasarturno()只是增加int turno的值,如果它增加到4以上,它的值就會重置爲1.我已經調用了PaintComponent結束時的重繪方法,因爲我之前沒有,但仍然沒有'工作。 – 2012-07-14 14:15:15
在控制檯中,它不寫「Ejecutándosefunciónde pintura de ficha」,所以我認爲問題在於paintComponent沒有被執行。不管怎麼說,還是要謝謝你。 – 2012-07-14 14:19:21