JavaFX - 访问父 fx :id from child

标签 java javafx

假设我在嵌套(子)fxml 文件中有一个按钮,并且在子 Controller 中我创建了一个在单击按钮时触发的操作事件。通过该方法,我想在我的主(父)fxml 中禁用或启用某些控件(例如选项卡中的某些选项卡)。

我怎样才能实现这个目标?

这是我找到的最接近的线程,它讨论了如何以相反的方式做到这一点:JavaFX - Access fx:id from nested FXML

非常感谢任何帮助!

最佳答案

在嵌套 Controller 中定义一个可观察的属性,并从周围的 Controller 中观察它:

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

    // ...
}

然后在“周围”(父) Controller (即带有 <fx:include> 标签的 FXML 文件的 Controller )中:

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

    // ...
}

关于JavaFX - 访问父 fx :id from child,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42696623/

相关文章:

java - 如何在不指定绝对路径的情况下从另一个 java 包中读取文件(例如 txt 文件)?

java - Scene#getStylesheets() 中相对路径的路径原点是什么?

java - 让 LocalDate 显示在 Javafx 的 Tableview 中

java - 如何将 CSV 文件中的数据输入到我的代码中?

java - 我需要在Java上将41.32万亿放入一个变量中,但是long数据类型仅限于4万亿

java - Hibernate session 关闭已关闭

java - 如何在Java中将文本文件中的数据读取到数组中,跳过某些元素

java - 字符串位于另一个字符串之上的 TextArea

JavaFX 3D 适用于超过 100 万个 Box 对象

javafx - 如何在框架“JAVAFX”中更改标题栏的颜色?