2015-11-10 90 views
-1

如果我包含println代碼並在Eclipse中啓動,Java控制檯通常會打印三個「x」。有時會打印兩個「x」。爲什麼不打印一個「x」?Java paint()只能調用一次嗎?

public void paint(Graphics g) { 
    super.paint(g); 
    setBackground(background); 
    System.out.println("x"); 

    // graphic etc. 
} 
+0

假設paint()**將*運行的頻率比您調用它要更爲安全。 –

回答

3

很多事情可以觸發調用paint,包括你的代碼,通過調用repaint(),通過渲染GUI的JVM,並通過告訴JVM是「髒」的區域需要被繪製的操作系統,明白這是你無法控制的東西。出於這個原因(和其他原因),程序邏輯應該不在所有的繪畫方法中。如果您需要幫助,請務必發佈更多相關代碼。

欲瞭解更多信息,請閱讀:Painting in AWT and Swing

作爲一個側面推薦,請注意,如果你的是一個Swing應用程序,paint方法應該很少被覆蓋,相反,你應該覆蓋JPanel或JComponent的paintComponent方法。

Side rec 2:從未在繪畫方法中調用setBackground(...)。這會引發不必要的重繪,並且是您看到三個「x」被打印的原因之一。相反,可以從你的類的構造函數中調用一次。

相關問題