[英]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決定重新粉刷主面板時,它還將重新粉刷所有子面板,然后這些子面板將重新粉刷那里的形狀。
自定義繪畫方法有什么用,可以在面板上繪制形狀。
可能是paintChildren
或paintBorder
重繪了您在方法中繪制的內容。 也許嘗試改寫paint
。 在那里,您可以完全控制將在組件上繪制的內容,並且可以決定是否進一步調用paintComponent
, paintChildren
或paintBorder
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.