是否可以在不是 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/