繁体   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