使用fxml将事件侦听器添加到Javafx中的主场景
我有一个描述我的gui的fxml。我想更改gui的文本并在任何地方的任何按键上启动任务 FXML 当我触发事件时,这为barcodeText指针提供了一个使用fxml将事件侦听器添加到Javafx中的主场景,java,javafx,fxml,eventhandler,Java,Javafx,Fxml,Eventhandler,我有一个描述我的gui的fxml。我想更改gui的文本并在任何地方的任何按键上启动任务 FXML 当我触发事件时,这为barcodeText指针提供了一个NullPointerException(在JavaFX应用程序线程内) 我做错什么了吗 我看到的示例是在没有fxml的情况下使用这种方法,我是否必须使用注释来定义处理程序?在fxml中,场景的“onAction”应该放在哪里?(旁白:看起来您试图对控制器和应用程序使用相同的类。) 在控制器类中定义用于设置条形码文本的方法: public vo
NullPointerException
(在JavaFX应用程序线程内)
我做错什么了吗
我看到的示例是在没有fxml的情况下使用这种方法,我是否必须使用注释来定义处理程序?在fxml中,场景的“onAction”应该放在哪里?(旁白:看起来您试图对控制器和应用程序使用相同的类。)
在控制器类中定义用于设置条形码文本的方法:
public void setBarcodeText(String barcode) {
barcodeText.setText(barcode);
}
然后从处理程序中调用该方法:
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/foo.fxml"));
Parent root = loader.load();
MyControllerClass controller = loader.getController();
Scene mainScene = new Scene(root);
mainScene.addEventHandler(KeyEvent.KEY_PRESSED, new KeyboardEventHandler(){
@Override
public void handle(KeyEvent event) {
controller.setBarcodeText("foo");
}
});
显然,用控制器类的实际名称替换MyControllerClass
。(旁白:看起来您试图对控制器和应用程序使用相同的类。)
在控制器类中定义用于设置条形码文本的方法:
public void setBarcodeText(String barcode) {
barcodeText.setText(barcode);
}
然后从处理程序中调用该方法:
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/foo.fxml"));
Parent root = loader.load();
MyControllerClass controller = loader.getController();
Scene mainScene = new Scene(root);
mainScene.addEventHandler(KeyEvent.KEY_PRESSED, new KeyboardEventHandler(){
@Override
public void handle(KeyEvent event) {
controller.setBarcodeText("foo");
}
});
显然,用控制器类的实际名称替换
MyControllerClass
。@FXML文本框
或@FXML-Text-barcodeText代码>?FXML加载器在控制器中初始化带注释的字段,而不是在调用start
的应用程序的实例中。因此,应用程序
实例中的条码文本
(或文本框
,或您真正调用它的名称)将为空。@pzaenger抱歉,这是一个错误typo@James_D好的,这就是问题的根源。我如何解决它?对于按钮,我可以执行@FXML public void onClick(Event-Event).
如何在场景中执行此操作?@FXML Text-textBox
或@FXML-Text-barcodeText代码>?FXML加载器在控制器中初始化带注释的字段,而不是在调用start
的应用程序的实例中。因此,应用程序
实例中的条码文本
(或文本框
,或您真正调用它的名称)将为空。@pzaenger抱歉,这是一个错误typo@James_D好的,这就是问题的根源。我如何解决它?对于按钮,我可以执行@FXML public void onClick(Event-Event).
如何在场景中执行此操作?谢谢,修复了我的问题。我还将接受提示并将控制器与应用程序分开。处理程序和控制器之间的区别是什么?另外,loader.getController在哪里定义?谢谢,修复了我的问题。我还将接受提示并将控制器与应用程序分开。处理程序和控制器之间的区别是什么?另外,loader.getController在哪里定义?