3

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

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

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

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

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

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

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

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

感谢所有的见解!

4

1 回答 1

3

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

//..
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。将不同任务中的场景值更新为您的类似问题。

于 2012-11-05T21:29:33.170 回答