2017-03-09 70 views
1

假設我在嵌套(子)fxml文件中有一個按鈕,並且在子控制器中創建了一個按鈕單擊時觸發的操作事件。從該方法中,我想要禁用或啓用我的主(父)fxml中的某些控件(例如一個tabpane中的某些選項卡)。JavaFX - 訪問父項fx:來自子項的ID

我該如何做到這一點?

這是最接近線程我發現,它討論瞭如何做到這一點的其他方式:JavaFX - Access fx:id from nested FXML

任何幫助,不勝感激!

回答

0

定義在嵌套控制器可觀察到的特性,並從周圍的控制器觀察它:

public class ChildController { 

    private final BooleanProperty stuffShouldBeDisabled = new SimpleBooleanProperty(); 

    public BooleanProperty stuffShouldBeDisabledProperty() { 
     return stuffShouldBeDisabled ; 
    } 

    public final boolean getStuffShouldBeDisabled() { 
     return stuffShouldBeDisabledProperty().get(); 
    } 

    @FXML 
    private void handleButtonClick(ActionEvent event) { 
     stuffShouldBeDisabled.set(! stufShouldBeDisabled.get()); 
    } 

    // ... 
} 

,然後在「周圍」(父)控制器(即控制器,用於與<fx:include>的FXML文件標籤):

public class MainController { 

    @FXML 
    private ChildController childController ; // injected via <fx:include fx:id="child" ... /> 

    @FXML 
    private Tab someTab ; 

    public void initialize() { 
     childController.stuffShouldBeDisabledProperty().addListener((obs, wasDisabled, isNowDisabled) -> { 
      someTab.setDisable(isNowDisabled); 
     } 
    } 

    // ... 
} 
+0

非常感謝,我想這就是我要找的。當我回家時,我會仔細看看,看看我能否根據你的回答找出答案!非常感激 :) –