【问题标题】:Stuck with event handling Java FX - Controller - Scene builder卡住事件处理 Java FX - 控制器 - 场景构建器
【发布时间】:2012-11-05 21:01:45
【问题描述】:

我想将 Netbeans Java FX 与 Scene builder 一起用于测量应用程序。我设计了一个带有控件的场景。我可以处理来自“...Controller.java”中的 UI 控件的事件。

“控制器”是在 XML 文件中引用并由系统初始化的标准代码:

public void initialize(URL url, ResourceBundle rb) { ..

我的问题:如何从控制器中访问我的中心、持久的“模型”对象?或者,更准确地说,来自控制器初始化函数中创建的事件处理程序。

“模型”对象将在应用程序对象中创建。

解决方法一定是微不足道的,但我还没有找到方法

  • 从控制器访问应用程序
  • 或从应用程序中访问控制器。 我错过了什么?

(下一个问题是如何访问由屏幕生成器创建的对象层次结构中的窗格树,例如用于输出图形操作。由于对象不是由自己的代码创建的,我无法存储对其中一些的引用. 好吧,也许可以通过tree-walking找到并引用它们,但一定有更好的方法!)

感谢所有见解!

【问题讨论】:

    标签: javafx scenebuilder


    【解决方案1】:

    我之前使用过第二种方法(从应用程序中访问控制器),类似于以下内容。在应用程序类中:

    //..
    private FooController fooController;
    private Pane fooPage;
    private Model myModel;
    
    @Override
    public void start(Stage stage) {
        //..
        myModel = new Model();
        getFooController().updateModel(myModel);
        //..
        Button button = new Button("Update model with new one");
        button.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    Model myNewModel = new Model();
                    getFooController().updateModel(myNewModel);
                }
        }
        // create scene, add fooPage to it and show.
    }
    
    private FooController getFooController() {
        if (fooController == null) {
           FXMLLoader fxmlLoader = new FXMLLoader();
           fooPage = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
           fooController = (FooController) fxmlLoader.getController();
        }
        return fooController;
    }
    

    实际上,您问题的第一部分和第二部分已回答JavaFX 2.0 + FXML. Updating scene values from a different Task 到您的类似问题。

    【讨论】:

    • 非常感谢 - 这帮助我让它工作!使用上面的代码,我仍然在 fxmlLoader.load() 上遇到“基本位置未定义”异常。添加:fxmlLoader.setLocation(getClass().getResource("foo.fxml")); 解决了这个问题!
    猜你喜欢
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多