2011-01-27 85 views
1

這讓我很緊張,它可能是我的一部分愚蠢,但我不明白爲什麼我的paintComponent被調用兩次,如果你運行我的代碼,它會輸出REPEAT?重複?兩次,我不希望它這樣做。那麼爲什麼它這樣做,我該如何解決它?爲什麼我的代碼執行paintComponent(圖形頁面)兩次?

import java.util.Random; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.*; 

public class Main extends JPanel { 


    public Main() 
    {  
    /*code here*/ 
    } 

    public void paintComponent(Graphics page) 
    { 
    clear(page); 

     /*code here*/ 

     System.out.println("REpEAT?"); 

    } 

    protected void clear(Graphics page) { 
     super.paintComponent(page); 
     } 

    public static void main (String[] args) 
    { 
     JFrame frame = new JFrame ("Circles"); 
     frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 200); 
     frame.getContentPane().add(new Main()); 
     frame.setVisible(true); 

    } 



} 
+0

我運行你的代碼和的paintComponent只運行一次。它打印REpEAT?只有一次。 – 2011-01-27 08:53:24

+0

真的嗎?是不是我的Java安裝有什麼問題? eclipse和netbeans中的JavaSE-1.6.0_22,它引起REpEAT?兩次 – novar 2011-01-27 08:54:32

回答

2

它也爲我打印了兩次。

但是,我不認爲這是值得關注的原因。 Swing決定何時需要重新繪製東西。例如,如果調整窗口大小或最小化/最大化,Swing將重新繪製。它可能取決於您正在運行的操作系統/硬件。

您應該編寫代碼,以便它足夠健壯以處理對repaint的多個呼叫。

請參閱本SO質疑過:paintComponent is executing twice

相關問題