javaFX,用@FXML注入的控件都是null,控件名称和fxid都是没有问题的,现在不知道那里问题

javaFX,用@FXML注入的控件都是null,控件名称和fxid都是没有问题的,现在不知道那里问题

错误是什么,贴个图看看

  • 以下回答由chatgpt基于相关博客总结生成:

    在JavaFX中,使用@FXML注解可以将FXML文件中声明的控件注入到控制器类中。在使用@FXML注解时,需要注意以下几点:

    1. 必须在FXML文件中为控件分配fx:id。fx:id的值必须是惟一的,并且不能包含空格或特殊字符(FX ID规则)。

    2. 控制器类必须通过fx:controller属性与FXML文件关联。在控制器类中,可以使用@FXML注解注入FXML文件中声明的控件,例如:

    @FXML private Button myButton;

    1. 若要确保注入的控件已在FXML文件中初始化,请确保在控制器类中使用initialize()方法。FXMLLoader负责创建FXML文件中声明的控件,并使用FXML控制器类中的注释将它们注入到控制器类中。

    关于你遇到的问题,有一些可能的原因:

    1. fx:id值错误:请检查FXML文件中控件的fx:id值是否与控制器类中使用@FXML注解的变量名相匹配。

    2. 控件未在FXML文件中声明:请确保FXML文件中声明了所有控件,并将它们分配给正确的fx:id值。

    3. 控制器类未与FXML文件关联:请在FXML文件中指定fx:controller属性,并将其设置为控制器类的完整类名。

    以下是一些示例代码,展示如何正确使用@FXML注入控件:

    FXML文件:

    <AnchorPane fx:id="rootPane" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.MyController">
       <Button fx:id="myButton" text="Click me!" onAction="#handleButtonAction"/>
    </AnchorPane>
    

    控制器类:

    public class MyController {
       @FXML private AnchorPane rootPane;
       @FXML private Button myButton;
    
       public void initialize() {
          // 在这里可以对控件进行初始化操作
       }
    
       @FXML
       public void handleButtonAction(ActionEvent event) {
          // 在这里处理按钮点击事件
       }
    }
    

    在以上代码中,使用@FXML注解将AnchorPane和Button注入到控制器类中。initialize()方法用于在控制器类中对控件进行初始化操作。handleButtonAction()方法用于处理按钮的点击事件。