簡體   English   中英

具有重寫的paintComponent方法的子組件將組件繪制到JPanel上方

[英]Child component with overridden paintComponent method draws component over top of JPanel

我有一個使用OverlayLayout布局管理器的父JPanel,並且JPanel包含一個主面板和一個覆蓋面板。

例如

setLayout(new OverlayLayout(this));
add(overlayPanel)
add(mainPanel);

這工作正常,但是主面板包含了我控件之外的許多組件,並且很多組件都覆蓋了paintComponent,當它們重新繪制時,最終將它們繪制在覆蓋面板的頂部。

如果再調整整個窗口的大小,則2個面板正確堆疊顯示。 有什么辦法可以防止這種情況,或者收到有關子組件已重繪的通知,以便隨后可以重新繪制整個窗口?

我確實嘗試過使用JLayeredPane,但是由於無法調整主窗口的大小,並且由於它不使用LayoutManager,我不得不設置邊界,而我卻努力使它起作用。

通常,面板包含以2維尺寸繪制的組件,因此您只需重新繪制單個組件,就不會影響其他組件。 繪畫針對這種情況進行了優化。

但是,當使用OverlayLayout時,組件將按3維進行繪制,因此繪制單個組件會影響其他組件。 因此,您需要刪除默認情況下完成的優化繪畫:

JPanel main = new JPanel()
{
    @Override
    public boolean isOptimizedDrawingEnabled()
    {
        return false;
    }
};

main.setlayout( new OverlayLayout(main) );
main.add( overlayPanel );
main.add( backgroundPanel );

或者在您的情況下,您似乎在擴展JPanel,因此您只需要重寫isOptimizedDrawingEnabled()方法即可。

暫無
暫無

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

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