我想将Netbeans Java FX与Scene Builder一起用于测量应用程序。我设计了一个带有控件的场景。我可以从“ ... Controller.java”中的UI控件处理事件。
“控制器”是XML文件中引用的标准代码,并由系统使用以下代码初始化:
public void initialize(URL url, ResourceBundle rb) { ..
我的问题:如何从控制器内部访问集中的,持久的“模型”对象?或者,更确切地说,是从控制器初始化函数中创建的事件处理程序中获得的。
“模型”对象将在应用程序对象内创建。
解决方案一定是微不足道的,但是我还没有找到解决方法
从控制器访问应用程序
或从应用程序内部访问控制器。
我想念什么?
(下一个问题是如何访问由屏幕构建器创建的对象层次结构内的窗格树,例如,用于输出上的图形操作。由于对象不是由自己的代码创建的,因此我无法存储对其中某些对象的引用。也许可以通过树游走找到并引用它们,但是必须有更好的方法!)
感谢所有见解!
最佳答案
我使用第二种方法(从应用程序内部访问控制器)前一段时间类似于以下内容。在应用程序类中:
//..
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回答。