java - 从 Java 代码访问 javaFX 元素(外部 Controller 类)

标签 java javafx scenebuilder

是否可以在不是 Controller 类的 java 代码中编辑/访问 javaFX 元素(例如按钮、标签等)?

我已经用java编写了整个程序,并且想在javaFX中为其制作一个GUI(使用Scene Builder)。由于整个代码已经用 FXML-controller 类之外的 Java 类编写,是否可以在我已经编写的类中访问“Labels”等元素?

我想做的就是在 FXML Controller 类之外使用此代码: label1.setText("某事");

因此它会在 GUI 上更新。

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

最佳答案

所以我认为您的解决方案取决于您在与 FX GUI 交互时需要信息的安全程度。如果您可以直接向 Controller 提供数据,那么我建议只需将数据对象传递到 Controller 的构造函数中并在本地存储对其的引用。然后,您可以使用数据对象中的任何 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 限制的数据对象进行调用。

您的 Controller 将变为:

 public class Controller {
      private Wrapper dataObject;

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

关于java - 从 Java 代码访问 javaFX 元素(外部 Controller 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040628/

相关文章:

java - 从 angularjs 对 java 的向上调用仅在手动页面刷新后才起作用

java - 如何创建弹出消息来提醒用户字段不完整?

java - 场景生成器 : How to hide borders on panels, 等

JavaFX 场景构建器 2 : controller class

java - 通过单击按钮或 Enter 键发送文本字段输入

java - 如何在Java中解码使用GSON创建的JSON文件?

java - SWT Scale - 添加更多条

java - GSON从复杂的json中获取字符串

java - 如何在 Java 上使用 Faker 创建随机登录

java - 在 JavaFX 应用程序中使用 POJO 作为模型层