请查看以下代码:
public static void main(String[] args) {
Group group1 = new Group();
Group group2 = new Group();
Label label = new Label("test");
group1.getChildren().add(label);
group2.getChildren().add(label);
System.out.println("Size group1: " +group1.getChildren().size());
System.out.println("Size group2: " +group2.getChildren().size());
}
如果标签被添加到group2,它会自动从group1中删除。有谁知道为什么这是有意的?
到目前为止,我不需要额外的功能,例如来自group类的边界,并使用一个简单的ArrayList来存储对标签对象的引用。
答案 0 :(得分:5)
在场景图中的任何位置最多可以出现一次节点。 具体来说,一个节点必须在所有节点中出现不超过一次 以下:作为Scene的根节点,子节点ObservableList 父节点,或节点的剪辑。
...
如果程序将子节点添加到父节点(包括组,区域, 等)并且该节点已经是不同父节点或子节点的子节点 在场景的根,自动(并静默)删除节点 它的前任父母。
...
可以重新排列场景图的结构 例如,将子树从场景图中的一个位置移动到 另一个。为此,通常会删除子树 在将其插入新位置之前从其旧位置。 但是,如上所述,将自动删除子树 如果应用程序没有明确删除它。
当Node
添加到Scene
时,JavaFX系统会在场景图中的该位置设置和管理特定于该节点的属性。一个示例是由父布局管理器确定的节点的位置及其约束。另一个是从父节点继承的css样式集。这两种数据都可能因节点在场景图中的位置而异。
如果系统允许您将同一节点放置在场景图中的另一个位置,它将覆盖为第一个位置确定的系统计算属性。一切都会变得非常混乱 - 导致程序难以推理并且拥有微妙的错误。