如何在Controller类的构造函数中访问JavaFX组件

时间:2014-11-14 06:24:00

标签: java javafx

我按以下方式加载FXML文件

        FXMLLoader loader = new FXMLLoader(getClass().getResource("register.fxml"));
        Controller c = new Controller("Welcome to EAST");
        loader.setController(c);
        Scene scene = new Scene(loader.load());
        fx.setScene(scene); // fx is a JFXPanel which is used to integrate FX in Swing

上面的代码运行正常,现在我想在Controller类的构造函数中访问textFields的{​​{1}}的默认值,但是它给出了错误:线程中的异常" JavaFX应用程序线程"显示java.lang.NullPointerException 即可。

注意:我已经为textFields分配了一些默认值,这就是我想要访问它们的原因。

以下是我的控制器类

Controller.java

register.fxml

任何建议都将不胜感激。谢谢:))

2 个答案:

答案 0 :(得分:4)

你不是。在FXMLLoader注入控件之前,必须创建控制器实例。您可以使用initialize方法而不是控制器中的构造函数。

让您的控制器实施https://docs.oracle.com/javafx/2/api/javafx/fxml/Initializable.html

或实施

class MyController {

    @FXML
    public void initialize(){
        //Will be called by FXMLLoader
    }

}

答案 1 :(得分:0)

FXMLLoader将开始在loader.load()中加载和初始化FX组件。在那一刻它需要控制器来进行事件处理。因此,如果您创建Controller(构造函数),则FXML无法使用。

只有在从FXML调用的事件方法中,您才能访问GUI组件。或者向控制器添加单独的方法,如

public void init() { ... }

在加载后调用...访问组件。