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的位置,並且它永遠不會位於左上角。
感謝
對不起,我對AffineTransform並不熟悉,並且找不到任何對它屬於Graphics對象的引用,你能提供一個代碼片段嗎? – 2012-04-04 10:08:37
將圖形轉換爲Graphics2D並使用公共AffineTransform getTransform()方法。 – StanislavL 2012-04-04 10:56:53
謝謝,我已經這樣做了,但沒有解決問題。我發現我動態添加到視圖中的每個組件都被繪製兩次,一次位於正確位置,一次位於相同位置,但相對於大約3層的組件。 有沒有將組件繪製到屏幕上而不將其添加到容器的方法?每當我嘗試時我都會看到一個窗口異常。 – 2012-04-04 11:26:25