小编典典

JavaFx fx:id导致错误

java

由于某些原因,我的fx:id无法正确绑定到我的Controller类,因此始终会导致错误。

控制者

package sample;

import javafx.fxml.FXML;

import java.awt.*;
import java.awt.event.ActionEvent;

public class Controller {

    @FXML public Button button;

    public void clickAction(ActionEvent actionEvent) {
        System.out.println("Button clicked.");
    }
}

XML文件

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<BorderPane fx:controller="sample.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <Button text="Click me!" fx:id="button" onAction="#clickAction" BorderPane.alignment="CENTER"/>
</BorderPane>

我认为我了解问题的根源,但不了解如何正确解决。根据这个问题的答案,我认为我正在尝试在调用构造函数之前分配FXML元素(并且这些元素只能在初始化期间/之后分配)。

有没有办法 执行此操作Initializable?还是我犯了一个完全不同的错误?


阅读 591

收藏
2020-11-26

共1个答案

小编典典

您使用进口

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

在您的fxml文件中。

因此,Button在加载fxml文件时创建的实例为javafx.scene.control.Button

注入的字段类型需要是javafx.scene.control.Button可以分配给a的字段。

由于除了控制器之外,您在控制器中的唯一导入javafx.fxml.FXML都是从java.awt软件包中导入的,因此对于button字段(type
java.awt.Button)显然不是这种情况。

修复控制器,以从javafx软件包中导入所需的类:

import javafx.fxml.FXML;

import javafx.scene.control.Button;
import javafx.event.ActionEvent;

顺便说一句:onAction如果您不使用处理程序的参数,也可以不使用它:

public void clickAction() {
    System.out.println("Button clicked.");
}
2020-11-26