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

Posted

技术标签:

【中文标题】一个 Swing 组件不能添加到多个容器中吗?【英文标题】:Can't a Swing component be added to multiple containers? 【发布时间】:2011-06-04 23:17:53 【问题描述】:

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

那么,

提前谢谢你。

【问题讨论】:

【参考方案1】:

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

在 JButtons 的情况下,您可以共享一个动作:

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

阅读 How to Use Actions 上的 Swing 教程部分了解更多信息。

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

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

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

【讨论】:

【参考方案2】:

解决了。

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

发件人:http://download.oracle.com/javase/tutorial/uiswing/components/toplevel.html

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

【讨论】:

我检查了确切的措辞并在您发布的同时编辑了我的答案。我想我应该先刷新一下。

以上是关于一个 Swing 组件不能添加到多个容器中吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 Swing 组件添加到容器的标准方法?

第十一周课程总结

Swing 顶层容器

将组件添加到组件时可能会出现啥问题

java窗口编程

Swing布局