如何在运行时将组件与另一个容器包装在一起?

时间:2009-04-16 07:01:44

标签: java swing

我想要实现的目标基本上是Netbeans在运行时的“Enclose in”功能:

假设我有这个组件层次结构:

Container
    Label 1
    Label 2
    Label 3

我想这样附上Label 2

Container
    Label 1
    Container
        Label 2
    Label 3

我还想恢复它,即我想再次“拉起”标签以获得原始层次结构。

编辑:问题是在运行时我只知道Label 2。任何其他组件(兄弟姐妹,父母,孩子)都是未知的。这消除了重建层次结构的可能性。

当然,我确信我可以通过遍历组件层次结构找到一些方式来获得此功能,但我想知道:

有更好的方法吗?也许某种实用类提供了这种封装功能?

编辑2:如何获取组件最初添加到容器的布局限制?我需要这些信息,因为新容器必须使用相同的约束。此外,在恢复原始层次结构时,组件必须重新使用其旧约束。

1 个答案:

答案 0 :(得分:1)

Container也是Component s,因此可以将Container括起来Container

所以,也许第一个状态就像(伪代码)一样:

Container container1 = new Container();
Label label1 = new Label();
Label label2 = new Label();
Label label3 = new Label();
container1.add(label1);
container1.add(label2);
container1.add(label3);

转换到第二个状态:

Container container2 = new Container();
container1.remove(label2);
container2.add(label2);
container2.add(container1);

现在,label2已移至container2,该容器本身也包含在container1中。

并返回原始状态:

container2.remove(label2);
container1.add(label1);
container1.remove(container2);

修改

如果我们所知道的只是label2本身,那已经包含在某些Container中,我们可以通过调用Container的{​​{3}来确定父Component方法。

将其应用于上面的代码,用以下内容替换container1行:

Container container1 = label2.getParent();

如果您想获取Component中保存的Container,可以调用getParent()方法以检索Component的数组。