【发布时间】:2017-03-09 21:35:48
【问题描述】:
假设我在嵌套(子)fxml 文件中有一个按钮,并且在子控制器中我创建了一个在按钮单击时触发的动作事件。通过该方法,我想在我的主(父)fxml 中禁用或启用某些控件(例如选项卡窗格中的某些选项卡)。
我怎样才能做到这一点?
这是我找到的最接近的线程,其中讨论了如何反过来:JavaFX - Access fx:id from nested FXML
非常感谢任何帮助!
【问题讨论】:
假设我在嵌套(子)fxml 文件中有一个按钮,并且在子控制器中我创建了一个在按钮单击时触发的动作事件。通过该方法,我想在我的主(父)fxml 中禁用或启用某些控件(例如选项卡窗格中的某些选项卡)。
我怎样才能做到这一点?
这是我找到的最接近的线程,其中讨论了如何反过来:JavaFX - Access fx:id from nested FXML
非常感谢任何帮助!
【问题讨论】:
在嵌套控制器中定义一个可观察的属性,并从周围的控制器观察它:
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);
}
}
// ...
}
【讨论】: