让JLayeredPane的子项填充容器的可用空间

时间:2017-04-03 15:47:45

标签: java swing layout jpanel jlayeredpane

我在JLayeredPane中有两个不同z-order的JPanel实例。我希望我的两个孩子JPanels总是填充LayeredPane的空间。

我的想法是让第二个面板的显示在第一个面板的顶部切换,以显示类似模态的对话框。是的,我可以使用JDialog,但我认为尝试创建覆盖JPanel的透明度超过一个很好的效果会很有趣。

我发现在JLayeredPane上使用布局管理器,比如BorderLayout,并尝试将两个子设置为CENTER冲突,因为两个面板都不在中心。

我有没有看到的伎俩?

2 个答案:

答案 0 :(得分:1)

  

我的想法是让第二个面板的显示切换到第一个

的顶部

最简单的方法是使用Glass Pane

查看Disabled Glass Pane以获取此方法的示例。

答案 1 :(得分:1)

有两种方法可以为JPanel的{​​{1}}创建一些类似于“玻璃面板”的叠层:

  • JLayeredPane的大小更改时,将ComponentListener添加到JLayeredPane并更新所有子组件的大小
  • 创建一个简单的JLayeredPane,它将其子FillLayout的大小扩展到布局Component(在我们的情况下为Container)的大小。您需要保留孩子JLayeredPane的列表。在Component期间,您将layoutContainer的尺寸复制到这些子Container中。我写了它,它真的很简单,但不幸的是我不能发布,因为它是公司的。但是,如果有人感兴趣,请在评论中提问。该实施基本上由一线组成。

对于两种解决方案,您都需要通过将Component设置为setOpaque来确保顶部的面板是透明的。这样可以确保基础面板呈现其内容。