2016-07-15 80 views
1

我可以在不知道父项的情况下从场景图中删除Node吗?在不知道父项的情况下删除节点(JavaFX)

换句话说,我可以这样做吗?

@FXML private ToolBar toolBar; 

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

    actionEvent.consume(); 
} 

如果我这样做,它抛出一个java.lang.UnsupportedOperationException

回答

3

你得到UnsupportedOperationException,因为Parent#getChildrenUnmodifiable返回一个只读列表:

获取此父为只读列表的孩子的名单。

它总是更好,更安全,如果您存储父容器的参考,但理论上你可以(上)做铸造用getParent()方法返回到父容器的类型Parent对象。

例如,如果ToolBar添加到VBox

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

或者,如果你想成为一个更通用一些,你可以将它转换为Pane,因为这个类是超类众多JavaFX的容器:

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

尽管如此,我建议存储所述父容器代替以下的这些(或类似)接近1的参考。

相关问题