2017-07-07 6 views
1

Je ne parviens pas à ajouter des nœuds de nouveau dans un AnchorPane lors de l'exécution. Ce que j'essaye de faire est quand un utilisateur clique sur un bouton, les noeuds actuels sont stockés dans un ObservableList<Node> et puis AnchorPane est effacé. Après cela, j'ai besoin d'ajouter de nouveaux nœuds là-bas. Ensuite, lorsque l'utilisateur a terminé, ils cliquent sur un autre bouton et mon enregistrement ObservableList est censé être ajouté à la AnchorPane.JavaFX effacer tous les nœuds de nouveaux nœuds anchorpane et en ajoutant lors de l'exécution

Fondamentalement, je suis en train d'afficher un formulaire d'informations client lorsque l'utilisateur clique sur le bouton « Client », puis afficher les nœuds qui étaient là pour commencer.

Y at-il une autre façon de le faire? Sans l'afficher dans une autre fenêtre? J'ai utilisé .addAll() mais cela ne fonctionne pas.

Merci.

private ObservableList<Node> middlePaneContent; 
@FXML 
private AnchorPane middlePane; 
@FXML 
private void setMiddlePane(){ 
    middlePaneContent = middlePane.getChildren(); 
    //middlePane.setVisible(false); 
    middlePane.getChildren().clear(); 
} 
@FXML 
private void setInspectionToMiddlePane(){ 
    //middlePane.getChildren().addAll(middlePaneContent); 
    middlePane.setVisible(true); 
} 
+0

Je suis confus au sujet de votre question, mais après avoir fait 'middlePaneContent = middlePane.getChildren();' puis middlePaneContent et les enfants de middlePane pointent vers la même chose. Si vous agissez sur l'un, l'autre va également changer - avez-vous besoin de «cloner» les données? –

+0

Oui, vous avez raison, comment en ferais-je une copie au lieu de le pointer? –

+0

Je ne sais pas ce que vos classes ressemblent, mais peut-être instanciation nouveaux ou peut-être 'clone' fonctionnera –

Répondre

1

vous stockez simplement une référence à la liste des enfants de middlePane dans middlePaneContent. Les deux pointent vers la même liste. Effacer l'un d'entre eux effacera "l'autre".

Utilisez un autre List pour stocker les données:

private List<Node> middlePaneContent = new ArrayList<>(); 

@FXML 
private AnchorPane middlePane; 

@FXML 
private void setMiddlePane(){ 
    // copy content to another list 
    middlePaneContent.clear(); 
    middlePaneContent.addAll(middlePane.getChildren()); 

    //middlePane.setVisible(false); 

    // clear child list 
    middlePane.getChildren().clear(); 
} 
+0

Merci, cela fonctionne la première fois que je le fais, mais sur le second clic, il me donne cette erreur: java.lang.IllegalArgumentException: Enfants: enfants dupliqués ajoutés: parent = AnchorPane [id = Content] –

+0

Peu importe si je n'effacais pas middlePaneContent avant d'ajouter les enfants middlePane. Merci beaucoup, fonctionne parfaitement maintenant. –