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

问题描述 投票:0回答:4

我正在尝试(测试其他东西)将一个

JButton
引用添加到两个
JPanels
来测试它,它从添加到的第一个面板中消失!

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

提前谢谢您。

java swing jpanel jbutton jcomponent
4个回答
47
投票

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

每个GUI组件都可以包含 只有一次。如果一个组件已经 在一个容器中,你尝试添加它 到另一个容器,组件 将从第一个中删除 容器,然后添加到 第二个。


6
投票

正如您所发现的,您无法共享组件。不过,您还可以使用其他方法。

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

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

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

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

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

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


4
投票

解决了。

查看 Java 教程的 UI-Swing 部分,它说。

每个 GUI 组件只能包含一次。如果某个组件已经在一个容器中,并且您尝试将其添加到另一个容器中,则该组件将从第一个容器中删除,然后添加到第二个容器中。

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.