2012-04-04 128 views
2

我在繪製JPanel時遇到問題。它正確繪製,但是當我調整父容器的大小時,JPanel被繪製在窗口的左上角以及正確的位置。JPanel定製繪圖

JPanel有一個自定義繪畫方法,繪製一組不屬於任何JPanel的組件(包括它)。這些被添加到的JPanel立即他們的油漆方法被調用之前,並且之後立即移除:

paintOnto.setIgnoreRepaint(true); 
    paintOnto.add(getPaintableComponent()); 
    getPaintableComponent().paint(g); 
    paintOnto.remove(getPaintableComponent()); 
    paintOnto.setIgnoreRepaint(false); 

paintOnto是JPanel中,getPaintableComponent(基準)返回一個JComponent待繪製。 g是從JPanel繪畫方法傳入的Graphics對象。

在mac中根本不需要添加/刪除代碼,但在沒有它的窗口下,組件根本沒有繪製。

此問題僅出現在Windows和Ubuntu中,而不是mac。其他系統未經測試。

任何想法可能導致它?我已經檢查過JPanel的位置,並且它永遠不會位於左上角。

感謝

回答

2

儘量節省graphics之前的AffineTransform和塗裝後恢復。

+0

對不起,我對AffineTransform並不熟悉,並且找不到任何對它屬於Graphics對象的引用,你能提供一個代碼片段嗎? – 2012-04-04 10:08:37

+0

將圖形轉換爲Graphics2D並使用公共AffineTransform getTransform()方法。 – StanislavL 2012-04-04 10:56:53

+0

謝謝,我已經這樣做了,但沒有解決問題。我發現我動態添加到視圖中的每個組件都被繪製兩次,一次位於正確位置,一次位於相同位置,但相對於大約3層的組件。 有沒有將組件繪製到屏幕上而不將其添加到容器的方法?每當我嘗試時我都會看到一個窗口異常。 – 2012-04-04 11:26:25