2012-07-14 107 views
3

我剛剛開始學習如何編程,所以如果我的問題很愚蠢,請原諒我。我一直在嘗試兩天以上找到解決這個問題的方法,但我無法通過網絡找到它,所以我需要你的幫助。提前致謝。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(); 
    } 
} 

感謝您的幫助。

+0

什麼是包含在Pasarturno方法中?最終你需要在Fischa組件上調用repaint()。 – Reimeus 2012-07-14 14:09:14

+0

Pasarturno()只是增加int turno的值,如果它增加到4以上,它的值就會重置爲1.我已經調用了PaintComponent結束時的重繪方法,因爲我之前沒有,但仍然沒有'工作。 – 2012-07-14 14:15:15

+0

在控制檯中,它不寫「Ejecutándosefunciónde pintura de ficha」,所以我認爲問題在於paintComponent沒有被執行。不管怎麼說,還是要謝謝你。 – 2012-07-14 14:19:21

回答

1

你可以添加重繪()到您的Refrescar方法:

public void refrescar() { 

    jpanel.add(jlabel); 
    jframe.add(jpanel); 
    jframe.pack(); 
    jframe.repaint(); 
} 
+0

它的工作原理!萬分感謝。問題解決了。 – 2012-07-14 15:05:42

+0

'ficha.repaint()'實際上是真實的:-) – 2012-07-14 16:02:54

相關問題