我想要实现的目标基本上是Netbeans在运行时的“Enclose in”功能:
假设我有这个组件层次结构:
Container
Label 1
Label 2
Label 3
我想这样附上Label 2
:
Container
Label 1
Container
Label 2
Label 3
我还想恢复它,即我想再次“拉起”标签以获得原始层次结构。
编辑:问题是在运行时我只知道Label 2
。任何其他组件(兄弟姐妹,父母,孩子)都是未知的。这消除了重建层次结构的可能性。
当然,我确信我可以通过遍历组件层次结构找到一些方式来获得此功能,但我想知道:
有更好的方法吗?也许某种实用类提供了这种封装功能?
编辑2:如何获取组件最初添加到容器的布局限制?我需要这些信息,因为新容器必须使用相同的约束。此外,在恢复原始层次结构时,组件必须重新使用其旧约束。
答案 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
的数组。