2016-07-15 7 views
1

Kann ich ein Node aus einem Szenengraphen entfernen, ohne dessen Eltern zu kennen?Einen Knoten entfernen, ohne das übergeordnete Element zu kennen (JavaFX)

Mit anderen Worten, kann ich so etwas tun?

@FXML private ToolBar toolBar; 

@FXML 
protected void handleCloseButtonAction(ActionEvent actionEvent) { 
    toolBar.getParent().getChildrenUnmodifiable().remove(toolBar); 

    actionEvent.consume(); 
} 

Wenn ich das tue, wirft es ein java.lang.UnsupportedOperationException.

Antwort

3

Sie erhalten die UnsupportedOperationException, weil Parent#getChildrenUnmodifiable eine Nur-Lese-Liste zurückgibt:

Ruft die Liste der Kinder dieser Eltern als Nur-Lese-Liste.

Es ist immer besser und sicherer, wenn Sie die Referenz des übergeordneten Containers speichern, aber theoretisch kann man es tun, indem (nach oben) Gießen der Parent Aufgabe durch das getParent() Verfahren auf die Art des übergeordneten Containers zurückgegeben.

Zum Beispiel, wenn die ToolBar wird ein VBox hinzugefügt:

((VBox) toolBar.getParent()).getChildren().remove(toolBar); 

Oder, wenn Sie ein bisschen mehr generisch sein wollen, können Sie es zu einem Pane werfen können, wie diese Klasse die Superklasse für zahlreiche Behälter JavaFX:

((Pane) toolBar.getParent()).getChildren().remove(toolBar); 

Dennoch würde ich vorschlagen, die Referenz des übergeordneten Container zu speichern, statt nach einer von diesen (oder ähnlich) annähert.