带标签的窗格,有几次同一个面板

时间:2011-04-21 09:32:26

标签: java swing

我有三个选项卡,第一个包含一个组件,第二个包含另一个组件,第三个选项卡包含第一个和第二个选项卡中的两个组件。 在我的第三个标签上,两个组件都没有出现。我是否必须克隆我的第一个和第二个组件才能将它放在第三个选项卡上?如果我的组件的某些属性发生了变化怎么办?

6 个答案:

答案 0 :(得分:1)

Swing组件一次只能有一个父级。因此,如果您尝试将组件的实例添加到多个容器,则无效。

因此,您必须为要添加它的每个容器创建一个组件实例。

答案 1 :(得分:1)

多个标签不能包含相同的组件。 Sun数据库中存在此错误:

Bug: 4176095 - Clarification that no 2 Tabs in JTabbedPane can have same component

有一个建议的修复程序,但尚未合并。

答案 2 :(得分:1)

正如其他人所提到的,Swing JComponent无法添加到多个其他JComponent(其父级)。

如果你关注的是分享组件的内容,那么你通常有一个简单的选择:由于Swing组件基于 MVC ,它们都有一个模型你可以在几个JComponent之间共享。

例如,JTextComponentJTextFieldJTextArea JTextComponent s)的模型为Document,此Document可以是共享,如下面的代码段所示:

JTextField field1 = new JTextField();
JTextField field2 = new JTextField();

field2.setDocument(field1.getDocument());

现在,如果您要同步其他属性(例如JTextField的列数),则必须像其他人建议的那样使用PropertyChangeListener

答案 3 :(得分:1)

如果你想实现这一目标。您可以执行以下步骤 - 添加选项卡列表器 - 每当选择一个选项卡时,您可以添加需要在所选选项卡面板中显示的组件并显示它。 (即,每当显示tabpanel时,我们将重置组件父详细信息)

答案 4 :(得分:0)

是的,任何挥杆组件只能添加到一个容器中。

答案 5 :(得分:0)

在每个选项卡上,您应该有单独的组件,使用侦听器可以操纵这些组件的属性。

要解决这样的问题,你应该熟悉MVC设计模式,