2009-04-16 114 views
0

我试图才达到基本上是在NetBeans特征中的“在附上”在运行时:如何在运行时将组件与另一个容器放在一起?

比方说,我有这样的组件层次:

Container 
    Label 1 
    Label 2 
    Label 3 

我要附上Label 2是这样的:

Container 
    Label 1 
    Container 
     Label 2 
    Label 3 

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

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

职高我相信我能找到一些方式通过遍历组件层级得到这个功能,但我想知道:

有没有更好的办法?也许某种提供这种封装功能的工具类?

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

回答

1

Container s也是Component s,因此可以将Container s包含在Container s中。

所以,也许是第一个国家将是沿(伪)线的东西:

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,我们可以通过调用确定父ContainerComponentgetParent()方法。

将其应用于上面的代码,更换线路制作container1有以下几点:

Container container1 = label2.getParent(); 

如果你想获得Component S的都在Container举行的getComponents()方法可以被称为为了检索一个数组Component s。

+0

哦,对不起,我注意到我的问题很模糊。我会澄清...... – 2009-04-16 07:13:06

相关问题