Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX和FXML。对组件的引用何时加载到控制器类中?_Java_Javafx_Fxml - Fatal编程技术网

JavaFX和FXML。对组件的引用何时加载到控制器类中?

JavaFX和FXML。对组件的引用何时加载到控制器类中?,java,javafx,fxml,Java,Javafx,Fxml,我有一个非常简单的fxml文件,带有一个复选框: ... <AnchorPane id="AnchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="jfx01.T01"> ... <CheckBox fx:id="checkBox1" text="CheckBox" /> ... 此基本应用程序的输出为: 在“start”方法中,组件显然已创建,但尚未分配给控制器类的@FXML字段。为了测试没有其他错误,我

我有一个非常简单的fxml文件,带有一个复选框:

...
<AnchorPane id="AnchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="jfx01.T01">
...
<CheckBox fx:id="checkBox1" text="CheckBox" />
...
此基本应用程序的输出为: 在“start”方法中,组件显然已创建,但尚未分配给控制器类的@FXML字段。为了测试没有其他错误,我添加了一个按钮和一个事件。 此时已分配复选框1

    @FXML protected void handleButton1Action(ActionEvent event) {
        System.out.println("button pressed");
        checkBox1.setSelected(!checkBox1.isSelected());
    }
问题:
如果由于init尚未完成而无法使用start方法,那么在init已完成且组件可用的情况下,第一个可用的方法是什么?

控制器应实现
javafx.fxml.Initializable
并重写
initialize(URL arg0,ResourceBundle res)
方法。
复选框复选框1
将被初始化,并且可通过FXMLLoader在该
初始化
方法中为您提供。方便的方法是将控制器和主(扩展应用程序)类分开,因此应用程序启动/入口点和FXML文件控制器应该是两个不同的类。

您可以通过以下方法访问控制器中的主阶段:

Node source = (Node) event.getSource();
Stage stage = (Stage) source.getScene().getWindow();
    @FXML protected void handleButton1Action(ActionEvent event) {
        System.out.println("button pressed");
        checkBox1.setSelected(!checkBox1.isSelected());
    }
Node source = (Node) event.getSource();
Stage stage = (Stage) source.getScene().getWindow();