我有一个非常简单的 fxml 文件,带有一个复选框:
...
<AnchorPane id="AnchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="jfx01.T01">
...
<CheckBox fx:id="checkBox1" text="CheckBox" />
...
非常简单的控制器类如下:
public class T01 extends Application {
@FXML protected CheckBox checkBox1;
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("t01.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
//here, here is the problem!
System.out.println("checkBox1==null? "+ (checkBox1==null?"yes":"no"));
}
}
这个基本应用程序的输出是:
checkBox1==null? yes
在“start”方法中,组件显然已经创建,但尚未分配给控制器类的@FXML 字段。作为没有其他错误的测试,我添加了一个按钮和一个事件。那里分配了checkBox1!
@FXML protected void handleButton1Action(ActionEvent event) {
System.out.println("button pressed");
checkBox1.setSelected(!checkBox1.isSelected());
}
问题
如果我因为 init 尚未完成而无法使用 start 方法,那么在 init 完成且组件可用的情况下,第一个可用的方法是什么?