Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
使用fxml将事件侦听器添加到Javafx中的主场景_Java_Javafx_Fxml_Eventhandler - Fatal编程技术网

使用fxml将事件侦听器添加到Javafx中的主场景

使用fxml将事件侦听器添加到Javafx中的主场景,java,javafx,fxml,eventhandler,Java,Javafx,Fxml,Eventhandler,我有一个描述我的gui的fxml。我想更改gui的文本并在任何地方的任何按键上启动任务 FXML 当我触发事件时,这为barcodeText指针提供了一个NullPointerException(在JavaFX应用程序线程内) 我做错什么了吗 我看到的示例是在没有fxml的情况下使用这种方法,我是否必须使用注释来定义处理程序?在fxml中,场景的“onAction”应该放在哪里?(旁白:看起来您试图对控制器和应用程序使用相同的类。) 在控制器类中定义用于设置条形码文本的方法: public vo

我有一个描述我的gui的fxml。我想更改gui的文本并在任何地方的任何按键上启动任务

FXML

当我触发事件时,这为barcodeText指针提供了一个
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在哪里定义?