Java Swing:如何将组件放在2个不同的面板上?

时间:2017-01-30 09:06:35

标签: java swing jpanel layout-manager

出于某些设计目的,我需要在2个面板上安装Java UI组件。但是,似乎任何JComponent都必须有一个父级,而且只有一个。因此,我的问题如下:你有什么技巧可以让一个组件同时超过2个面板吗?

我在这篇文章中附上了我想要的内容。

enter image description here

2 个答案:

答案 0 :(得分:2)

正如您所说,每个组件必须只有一个父组件。因此,您必须将JPanel 1,JPanel 2和JComponent添加到公共容器中。

我建议将JPanel 1和JPanel 2添加到另一个JPanel,例如BorderLayout或GridLayout,然后将JPanel和您的重叠JComponent添加到另一个JPanel并使用自定义布局管理器。

查看接口LayoutManager - 它排列容器中组件的边界和位置。假设你知道自己想要什么,实际上并不难实现。在这种特殊情况下,JComponent可以相对于两个JPanel组件进行布局,这两个组件可以显式传递给LayoutManager实现。

这是一个非常具体的解决方案,但您也可以使用LayoutManager2代替LayoutManager进行推广。 LayoutManager2允许使用约束对象来布局组件。每个约束都是一个普通的Java对象,它描述了组件的布局。它特定于所使用的LayoutManager2实现。

答案 1 :(得分:-1)

如果您覆盖面板的repaint方法并且不将组件添加到任何面板,但是此解决方案太复杂了。

组件只能属于一个面板。

您可以使用第三个面板,其中包含这两个布局选项的所有三个元素:

<强> 1。没有布局管理器
https://docs.oracle.com/javase/tutorial/uiswing/layout/none.html

<强> 2。 OverlayLayout布局 https://docs.oracle.com/javase/8/docs/api/javax/swing/OverlayLayout.html