【问题标题】:JavaFX - Access parent fx:id from childJavaFX - 从子访问父 fx:id
【发布时间】:2017-03-09 21:35:48
【问题描述】:

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

我怎样才能做到这一点?

这是我找到的最接近的线程,其中讨论了如何反过来:JavaFX - Access fx:id from nested FXML

非常感谢任何帮助!

【问题讨论】:

    标签: java javafx


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,我想这就是我要找的。我回家再仔细看看,看看能不能根据你的回答搞清楚!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多