我遇到了一個問題,無論我做什麼,我的JPanel都不會重新繪製。我正在使用以下方法創建一個連接四個遊戲板,並隨着遊戲進行動態地改變圈子的顏色,但我將它簡化成了一個具有相同問題的測試課程。JPanel在分配新子類時不會重新繪製
我決定爲每個圓圈使用狀態模式設計。以下是類的代碼,因此它知道要打印哪種顏色,即JPanel兒童類。
public class GridCircle extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(0, 0, 100, 100);
}
}
public class WhiteGridCircle extends GridCircle
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillOval(5, 5, 80, 80);
}
}
public class RedGridCircle extends GridCircle
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.fillOval(5, 5, 80, 80);
}
}
以下是測試類,我試圖改變類一個JPanel在主方法,以看它是否會改變所畫的顏色(失敗)。
public class test extends JFrame
{
static JPanel testPanel = new WhiteGridCircle();
public static void main(String[] args)
{
new test();
testPanel = new RedGridCircle();
testPanel.revalidate();
testPanel.repaint();
}
test()
{
this.add(testPanel);
this.setSize(150,150);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
}
我不明白爲什麼面板不會重漆,不管我嘗試過什麼。根據我的理解,repaint()不能保證調用paint方法,但我沒有理由不會在沒有任何其他事情發生時進行調用。
您正在更改某個變量引用的對象,但這不會對所顯示的對象產生神奇的影響。您需要更改由GUI保存的JPanel *對象*。這可以歸結爲* object *和a * variable *之間的基本區別。 – 2015-04-06 12:08:14