JavaFX - 从子级访问父级fx:id

时间:2017-03-09 13:26:04

标签: java javafx

假设我在嵌套(子)fxml文件中有一个按钮,在子控制器中我创建了一个按钮点击时触发的动作事件。从该方法我想在我的主(父)fxml中禁用或启用某些控件(例如tabpane中的一些选项卡)。

我怎样才能做到这一点?

这是我找到的最接近的主题,它反过来讨论了如何做到这一点:JavaFX - Access fx:id from nested FXML

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在嵌套控制器中定义一个observable属性,并从周围的控制器中观察它:

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() );
    }

    // ...
}

然后在“around”(父)控制器(即带有<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);
        }
    }

    // ...
}