2017-03-09 58 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

非常感谢,我想这就是我要找的。当我回家时,我会仔细看看,看看我能否根据你的回答找出答案!非常感激 :) –