2015-04-03 66 views
0

我寫了一個paint類,並將jpanel添加到框架中,但由於某種原因它被調用了兩次,因爲我在圖形方法中放置了打印語句,並且打印了兩次。下面的代碼是我包裝中的所有代碼。如何創建一個不會被調用兩次的paint類?

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class Paint extends JPanel { 

static Paint paint = new Paint(); 

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(500, 500); 
} 

public void paintComponent(Graphics g) { 

    super.paintComponent(g); 

    System.out.println("Hello"); 

} 

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.add(paint); 

    frame.pack(); 
    frame.setLocation(300, 300); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

} 
+0

代碼似乎只打印一次Hello。 – 2015-04-03 19:01:33

+0

我測試了它,它的工作原理應該如此(只打印一次)。你是從IDE運行它嗎?試着從命令行看它是否相同。也許這是一個焦點問題。 – 2015-04-03 19:02:18

+1

無論何時都需要它。如果您只想繪製一次繪製過程,您可以在離屏圖像上繪製它,然後在調用paintComponent時繪製圖像。 – Bubletan 2015-04-03 19:02:26

回答

1

我試過你的代碼和paintComponent它不會每次調用兩次。當你打電話給setVisible時,我認爲你無法控制JFrame何時調用pack()。這可能取決於您的操作系統如何管理窗口。

+0

我正在使用便攜式eclipe。 – Skillet 2015-04-03 19:04:22

+0

這不是運行你的代碼的IDE。在eclipse或其他IDE上,結果將是相同的。 – 2015-04-03 19:08:45

+0

我該如何解決這個問題? – Skillet 2015-04-03 19:10:08