【发布时间】:2017-02-28 15:20:11
【问题描述】:
我有一个描述我的 gui 的 fxml。我想更改 gui 的文本并在任何地方按任意键启动任务。
FXML
<Text fx:id="barcodeText"/>
控制器
@FXML
Text barcodeText;
public void start(Stage primaryStage) throws IOException {
this.primaryStage=primaryStage;
Scene mainScene =new Scene(root);
primaryStage.setScene(mainScene);
primaryStage.setResizable(false);
primaryStage.show();
Parent root = FXMLLoader.load(getClass().getResource("/view/foo.fxml"));
mainScene.addEventHandler(KeyEvent.KEY_PRESSED,new KeyboardEventHandler(){
@Override
public void handle(KeyEvent event) {
barcodeText.setText("foo");
}
});
当我触发事件时,这给了我一个 barcodeText 指针的NullPointerException(在 JavaFX 应用程序线程内)。
我做错了吗?
我查看的示例是使用这种方法而不使用 fxml,我是否必须使用注释来定义处理程序?我应该在 fxml 中将场景的“onAction”放在哪里?
【问题讨论】:
-
@FXML Text textBox;或@FXML Text barcodeText;? -
FXML 加载器在 控制器 中初始化
@FXML注释字段,而不是在调用start的Application类的实例中。所以barcodeText(或textBox,或任何你真正称呼它的名字)在Application实例中将为空。 -
@pzaenger 抱歉,打错了
-
@James_D 好的,这就是问题的根源。我该如何解决?对于一个按钮,我可以做
@FXML public void onClick(Event event) ...我如何为场景做这个?
标签: java javafx fxml eventhandler