2010-03-09 92 views
2

我正在繪製此JPanel中的形狀,這也在另一個主JPanel內。在repaint()它只繪製一毫秒的形狀,然後消失。他們不留畫,爲什麼?使用另一個JPanel中的JPanel重繪問題

paintComponent方法是這樣

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    for (int i = 0; i < reportElements.size(); i++) { 
     this.reportElements.get(i).display((Graphics2D) pageComponents.get(i).getGraphics()); 

    } 
} 

當父是setEditable()一個JEditorPane啓用,它的工作原理,我們可以看到形狀,但是當它是一個JPanel,一毫秒後,我看到的是空的面板。

+0

你試過重寫** paint(Graphics g)**而不是** paintComponent(Graphics g)**? – Jack 2010-03-09 15:44:10

+0

感謝您的建議插孔,但這不是問題。我想我試過 – Halo 2010-03-09 16:20:56

回答

2

在這種情況下會發生什麼那些 pageComponents,小JPanels獲得?父母面板 是不是要畫他們的形狀 是嗎?

我不確定我是否接受您的評論。你的主面板應該包含子面板。應使用佈局管理器將子面板添加到主面板。然後,當Swing決定重新繪製主面板時,它還會重新繪製所有子面板,然後子面板將重新繪製這些形狀。

它的價值Custom Painting Approaches有一個在面板上繪製形狀的工作示例。

+0

我的意思是我想要的形狀不是在主面板,但孩子,所以,當我改變其中一個小JPanels的座標圖也會改變位置,或者當我移除其中一個JPanel時,圖形也會分解(BG-SoA)。 – Halo 2010-03-09 17:16:19

+0

那麼,這正是我所描述的,每個子面板的paintComponent()方法都是自定義的。然後,當您將子面板添加到父級時,該子級的繪製會自動完成。 – camickr 2010-03-09 17:45:10

+0

我明白,然後定製他們的油漆我想我還需要爲子面板創建一個單獨的類。因爲我剛剛創建了JPanel的對象。沒有等待會不會導致同樣的問題呢? – Halo 2010-03-09 17:51:45

0

這可能是paintChildrenpaintBorder透支你在你的方法中繪製的任何東西。也許嘗試重寫paint。您可以完全控制組件上的內容,並且您可以自行決定是否繼續致電paintComponentpaintChildrenpaintBorder

+0

我想我試過了,但沒有奏效。謝謝 – Halo 2010-03-09 16:23:48

3

你應該畫在JPanel的圖形對象上,才能永久......在你的榜樣,那就是Graphics g ...

+0

我馬上試試 – Halo 2010-03-09 16:21:54

+0

,但等一下。在這種情況下,這些pageComponents(小JPanels)會發生什麼?家長面板不會在他們身上畫出形狀嗎?那麼他們現在是無用的嗎? – Halo 2010-03-09 16:34:40

2

ultrajohn是死了。您需要使用已通過的Graphics。請閱讀原因......

Java 1.6引入了支持優化重新繪製請求的RepaintManager。它對繪畫有一些微妙的影響。

在這種情況下,您正在使用多個Graphics2D對象:將g傳遞給paintComponent並調用getGraphics返回的值。

重繪管理器已交給您g進行繪製。注意:這不會在屏幕上繪製,而是在臨時緩衝區上(假設默認雙緩衝)。

paintComponent調用中,您正在繪製從各個組件的getGraphics獲取的圖形。這繞過重繪管理器並直接繪製到無緩衝的顯示器。

paintChildren返回時,RepaintManager開始處理更新雙緩衝區。它繪製空白臨時緩衝區在顯示緩衝區,有效地消除了什麼畫過的圖形對象從getGraphics

+0

感謝您的解釋,我會在晚餐後嘗試。 – Halo 2010-03-09 16:22:24

+0

@Devon_C_Miller,我想你說我已經死了...... :) – ultrajohn 2017-02-18 05:47:36

+0

對不起@ultrajohn,我的錯!我被你的數據包上的8年RTT愚弄了;-) – 2017-02-21 22:03:11