27

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

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

先感谢您。

4

4 回答 4

47

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

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

于 2011-01-06T22:27:15.840 回答
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 );

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

于 2011-01-06T23:03:05.077 回答
4

解决了。

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

每个 GUI 组件只能包含一次。如果一个组件已经在一个容器中,并且您尝试将其添加到另一个容器中,则该组件将从第一个容器中删除,然后添加到第二个容器中。
于 2011-01-06T22:28:42.573 回答
1

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

于 2011-01-06T22:28:08.597 回答