我試圖根據paint()
或paintComponent()
方法中的一些計算繪製和繪製一些幾何形狀。但是,我意識到paint()
或paintComponent()
內的打印和其他計算語句執行2次或有時3次。例如在下面的代碼打印語句執行兩次,「幫助」一詞在控制檯打印了兩次:爲什麼語句在paint或paintComponent方法中多次執行?
public class Skeleton extends JPanel {
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.drawOval(50, 50, 100, 100);
System.out.println("help");
}
,然後在控制檯打印的部分是這樣的:
help
help
這裏是我main()
方法
public static void main(String[] args) {
JFrame frame = new JFrame("Java 2D Skeleton");
frame.add(new Skeleton());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(870, 890);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
更糟的是,如果我有一個類的公共變量,我通過1內增加其價值方法。這導致值增加2. 我已經讀過這個網站的某個地方,方法paint()
自動調用其他三種方法,這是他們導致這個問題的原因。 另外我也嘗試了一些建議的解決方案在另一個網站上,以覆蓋方法paintComponent()
而不是方法paint()
。但是我仍然有同樣的問題。 請幫我修復它。
感謝您的響應,但我需要它根據一些變量的值和計算繪製形狀。此外,我需要根據形狀位置調用其他方法來完成其他人員。如果適用的話,可能的解決方案是用不同的方法進行計算,但在這個新的方法中,我調用paintComponent方法來完成繪畫。這可能嗎? – user2449472
你不應該直接調用paintComponent()。如果更改導致繪畫更改的類的屬性,則調用repaint(),然後Swing將確定何時重新繪製該組件。 – camickr