簡體   English   中英

將 JPanel 上的組件放在前面 (Java)

[英]Bring a component on a JPanel to front (Java)

在 VB 中,您可以使用zOrder 在.Net 中,它是.SetChildIndex

在你問之前,不,在這種情況下我沒有使用布局管理器。 如果您有兩個相互重疊的組件,那么在它們已經顯示后如何更改順序?

由於空間不足,我有一個按鈕與另一個組件(標簽)略有重疊。 我在按鈕之前將 JLabel 添加到表單中,當表單加載時,它看起來很好。 但是,當用戶單擊按鈕時,JLabel 會退到后面,從而使其中的一部分消失。 有沒有辦法讓它保持在前面? 我曾嘗試將label.grabFocus()放在按鈕的 ActionListener 中,但它不起作用。

您也可以使用 JFrame 的 LayeredPane。 使用 JFrame.getLayeredPane() 您可以獲得正在使用的窗格的參考。

LayeredPane 的 add 方法最多有 2 個額外的 int 參數。 第一個指定要添加的組件的層,第二個控制該層內的順序。

您可以在http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html#layeredpane找到更多信息

當組件在面板上重疊時,您需要告訴面板,以確保它以正確的 ZOrder 重新繪制組件:

為此,您可以重寫 JPanel 的isOptimizedDrawingEnabled()方法以返回false

首先,這似乎是一個糟糕的設計。 雖然label.repaint()有效,但它不是你應該這樣做的方式。 您沒有明確指定這些組件如何相互重疊。 為此,更好的方法是分層窗格。 zOrder 的 java 對應物是分層窗格。 此鏈接應該可以幫助您: http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

如果您有任何問題,請告訴我。

我不確定,但會重新粉刷工作嗎? 如果確實如此,那就有點hack了,也許其他人可以找到更好的方法...

讓重疊的組件以正確的方式運行並不是那么明顯。 最受支持的方式是在面板中使用 OverlayLayout。

暫無
暫無

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

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