一个Swing组件不能添加到多个容器中吗?

27

我正在尝试(测试其他东西),将一个 JButton 引用添加到两个 JPanels 中进行测试,但它从第一个面板中消失了!

那么,Swing 组件不能被添加到多个容器中吗?

提前感谢您的回答。

4个回答

47

来自: http://download.oracle.com/javase/tutorial/uiswing/components/toplevel.html:

每个GUI组件只能被包含一次。如果一个组件已经在一个容器中,并且你尝试将它添加到另一个容器中,那么该组件将从第一个容器中移除,然后再添加到第二个容器中。


(说明:该段内容讲解了GUI组件在Java编程中的使用规则,即同一个GUI组件只能被包含在一个容器中。如果要将其放入另一个容器中,则需要先将其从原有容器中移除,然后再添加到新的容器中。)

我检查了确切的措辞,并在您发布回答的同时进行了编辑。我想我应该先刷新页面。 - jzd

6

正如您发现的那样,您无法共享组件。但是有其他方法可供使用。

对于JButtons,您可以共享一个Action:

JButton button1 = new JButton( someAction ); JButton button2 = new JButton( someAction );

阅读Swing教程中关于如何使用Actions的部分以获取更多信息。

在其他情况下,您可能希望共享模型:

DefaultTableModel model = new DefaultTableModel( ... );
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );

解决方案取决于您的要求。


4

已解决。

查看Java教程的UI-Swing部分,其中写到:

每个GUI组件只能被包含一次。如果一个组件已经在一个容器中,并且你尝试将它添加到另一个容器中,该组件将从第一个容器中移除并添加到第二个容器中。

1

我认为这是不可能的。你可以做的是让多个组件共享同一个事件处理程序。因此,在你的情况下,声明两个按钮并使用相同的事件处理方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接