2012-11-26 29 views
2

请看下面的代码:的JavaFX的getChildren()列出行为

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()); 
    } 

如果标签被添加到组2就自动从1组中删除。有谁知道这是为什么?

到现在为止,我不需要额外的功能,例如并且使用一个简单的ArrayList来存储对标签对象的引用。

回答

5

Node documentation

可以最多一次在场景图中的任何地方发生的节点。 具体来说,一个节点必须在以下所有 中出现不超过一次:作为场景的根节点,子节点ObservableList为 父节点,或作为节点的剪辑。

...

如果程序增加了一个子节点到父(包括集团,地区, 等),并在该节点已经是一个不同父母的孩子或 根场景中,节点自动(并且默默地)从其前母公司 中移除。

...

是可能的重新排列场景图的结构中,对于 例如,从一个位置在场景图中移动一个子树 另一个。为了做到这一点,通常会在将子树插入新位置之前从旧位置删除子树 。 但是,如果应用程序没有明确删除它,则子树将被自动删除,如上所述 。

Node添加到Scene,JavaFX的系统集和在所述场景图该位置管理专用于该节点的属性。一个例子是由父布局管理器确定的节点的位置,它是约束条件。另一个是从父节点继承的CSS样式集。根据节点在场景图中的位置,这两种数据可能会有所不同。

如果系统允许您将同一个节点放置在场景图中的另一个位置,它将覆盖为第一个位置确定的系统计算属性。一切都会变得非常混乱 - 导致程序难以推理并且存在微妙的错误。

相关问题