【问题标题】:Adding Event listener to mainScene in Javafx using fxml使用 fxml 将事件侦听器添加到 Javafx 中的 mainScene
【发布时间】: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 注释字段,而不是在调用 startApplication 类的实例中。所以barcodeText(或textBox,或任何你真正称呼它的名字)在Application 实例中将为空。
  • @pzaenger 抱歉,打错了
  • @James_D 好的,这就是问题的根源。我该如何解决?对于一个按钮,我可以做@FXML public void onClick(Event event) ...我如何为场景做这个?

标签: java javafx fxml eventhandler


【解决方案1】:

(顺便说一句:看起来您正在尝试为控制器和应用程序使用相同的类。Don't do that.

在控制器类中定义一个设置条形码文本的方法:

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 替换为控制器类的实际名称。

【讨论】:

  • 谢谢,解决了我的问题。我还将接受提示并将控制器与应用程序分开。
  • handler和controller有什么区别? loader.getController 在哪里定义?
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 2011-05-29
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多