可以說我做了一個簡單的圖形應用程序。它有兩個類,主類和稱爲「面板」的第二類,它擴展了JPanel。 主類只是一個包含JPanel的JFrame。這裏是它的內容:在paintComponent()方法中,變量沒有改變
public static Panel panel = new Panel();
public static void main(String[] args) {
JPanel p = new Panel();
JFrame fr = new JFrame();
fr.setSize(600, 600);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setLocationRelativeTo(null);
fr.setVisible(true);
fr.add(p);
while (true) {
fr.repaint();
if (panel.test) panel.g2d.drawRect(30, 30, 40, 40);
}
}
第二類使用Graphics2D來創建JPanel的內容。它也具有在paintComponent()方法中更改的變量。下面是它的內容:
Graphics2D g2d;
boolean test = false;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g2d = (Graphics2D) g;
test = true;
g2d.setColor(Color.RED);
g2d.drawRect(10, 10, 20, 20);
}
然而,這裏的問題:既不test
也不g2g
出現的paintComponent()方法已被執行之後改變。儘管paintComponent()方法很好地繪製矩形,但main方法的while循環中的代碼永遠不會結束繪製矩形。在主要方法中,test
和g2g
似乎總是分別爲false
和null
。我在這裏錯過了什麼?無論如何,在paintComponent()方法之外使用graphics2D?
難道說變化,但問題仍然存在 – Dan 2014-09-05 23:02:49
@SuperNew:如果您更改您的密碼,然後發佈新的代碼編輯到你原來的問題。不要擺脫原來的代碼,而是在它下面添加新的代碼。也顯示更多的代碼。也不要將任何類「Panel」命名爲與核心Java類名衝突。另外,你有沒有讀過教程? – 2014-09-05 23:04:46