从Java代码(控制器类外部)访问javaFX元素

时间:2016-01-27 14:55:11

标签: java javafx scenebuilder

是否可以在不是控制器类的java代码中编辑/访问javaFX元素(如Buttons,Labels等)?

我已经在java中编写了一个完整的程序,并希望在javaFX(使用Scene Builder)中为它创建一个GUI。由于整个代码ALREADY是用FXML控制器类之外的Java类编写的,因此可以访问像"标签"等元素。在我已写的课程里面?

我想要做的就是在FXML控制器类之外使用此代码: label1.setText("东西&#34);

因此它在GUI上更新。

如果没有,在FXML控制器类中实现我的java代码是一个非常耗时的过程。

1 个答案:

答案 0 :(得分:0)

所以我认为您的解决方案取决于您在与FX GUI连接时需要多少信息。如果您可以直接向控制器提供数据,那么我建议您只需将数据对象传递给控制器​​的构造函数并在本地存储对它的引用。然后,您可以使用数据对象中的任何getter / setter来填充GUI,或更新模型。

 public class Controller {
      private Object dataObject;

      public Controller(Object dataObject) {
           this.dataObject = dataObject;
      }
 }

但是,如果您想保护数据并阻止GUI直接修改或与之交互,则需要使用保护信息的包装器。

 public class Wrapper {
      private Object dataObject;

      public Controller(Object dataObject) {
                this.dataObject = dataObject;
      }

      // allowable function call
      public Object functionOne() {
           return dataObject.functionOne();
      }
 }

您只需要在GUI中直接需要的包装器中实现函数,从而防止调用您认为应该限制在GUI中的数据对象。

然后您的控制器变为:

 public class Controller {
      private Wrapper dataObject;

      public Controller(Wrapper dataObject) {
           this.dataObject = dataObject;
      }
 }