2012-11-26 3 views
2

Regardez le code suivant:JavaFX getChildren() Liste des comportements

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

Si l'étiquette est ajouté à GROUP2 il est automatiquement retiré de groupe1. Est-ce que quelqu'un sait pourquoi cela est prévu?

Jusqu'à maintenant, je n'ai pas besoin de la fonctionnalité supplémentaire, par ex. borne de la classe de groupe et utilise une ArrayList simple pour stocker les références aux objets label.

Répondre

5

De l'Node documentation:

Un nœud peut se produire au plus une fois partout dans le graphique de la scène. Spécifiquement, un nœud ne doit pas apparaître plus d'une fois dans tous les suivants: en tant que nœud racine d'une scène, les enfants ObservableList de un parent, ou en tant que clip d'un nœud.

...

Si un programme ajoute un nœud enfant à un parent (y compris groupe, Région, , etc.) et que le noeud est déjà un enfant d'un autre parent ou la racine d'une scène, la Le noeud est automatiquement (et silencieusement) supprimé de son ancien parent.

...

Il est possible de réorganiser la structure du graphe de scène, pour exemple, pour déplacer un sous-arbre d'un endroit dans le graphique de scène à une autre . Pour ce faire, on devrait normalement retirer le sous-arbre de son ancien emplacement avant de l'insérer au nouvel emplacement. Cependant, le sous-arbre sera automatiquement supprimé comme décrit ci-dessus si l'application ne le supprime pas explicitement.

Lorsqu'un Node est ajouté à un Scene, les ensembles du système JavaFX et gère des attributs spécifiques à ce noeud à cet endroit dans la scène graphique. Un exemple est l'emplacement du nœud tel que déterminé par un gestionnaire de disposition parent et ses contraintes. Un autre est l'ensemble de styles css hérité des nœuds parents. Ces deux types de données peuvent varier en fonction de l'emplacement du nœud dans le graphe de scène. Si le système vous permettait également de placer le même nœud à un autre emplacement dans le graphe de scène, il écraserait les attributs calculés par le système déterminés pour le premier emplacement. Tout deviendrait très confus - aboutissant à des programmes difficiles à raisonner et à posséder des bugs subtils.

Questions connexes