假设我在嵌套(子)fxml文件中有一个按钮,在子控制器中我创建了一个按钮点击时触发的动作事件。从该方法我想在我的主(父)fxml中禁用或启用某些控件(例如tabpane中的一些选项卡)。
我怎样才能做到这一点?
这是我找到的最接近的主题,它反过来讨论了如何做到这一点:JavaFX - Access fx:id from nested FXML
非常感谢任何帮助!
答案 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);
}
}
// ...
}