2016-07-15 86 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的參考。

相關問題