簡體   English   中英

重新繪制另一個JPanel中的JPanel問題

[英]Repaint issue with JPanel inside another JPanel

我正在這個JPanel內部繪制形狀,該JPanel也在另一個主JPanel內部。 repaint()它僅繪制形狀一毫秒,然后它們消失。 他們沒有畫畫,為什么?

我的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 ,在一毫秒后,我看到的只是空面板。

您應該將其繪制為JPanel的Graphics對象,以使其永久...在您的示例中,這是Graphics g ...

Ultrajohn死了。 您需要使用已通過的Graphics 繼續閱讀為什么...

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

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

重繪經理遞給你g上作畫。 注意:這不會在屏幕上繪制,而是在臨時緩沖區上繪制(假定使用默認的雙緩沖)。

paintComponent調用中,您正在繪制從各個組件的getGraphics獲得的圖形。 這繞過了重新繪制管理器,直接繪制到無緩沖的顯示。

paintChildren返回時, RepaintManager啟動以處理更新雙緩沖區。 它在顯示的緩沖區上繪制空白的臨時緩沖區,從而有效擦除通過從getGraphics獲得的圖形對象繪制的內容

在這種情況下,那些pageComponents(小的JPanels)會怎樣? 父面板不會在其上繪制形狀嗎?

我不確定我是否理解您的評論。 您的主面板應包含子面板。 子面板應使用布局管理器添加到主面板。 然后,當Swing決定重新粉刷主面板時,它還將重新粉刷所有子面板,然后這些子面板將重新粉刷那里的形狀。

自定義繪畫方法有什么用,可以在面板上繪制形狀。

可能是paintChildrenpaintBorder重繪了您在方法中繪制的內容。 也許嘗試改寫paint 在那里,您可以完全控制將在組件上繪制的內容,並且可以決定是否進一步調用paintComponentpaintChildrenpaintBorder

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM