我正在编写一个具有许多数据输入窗口的应用程序,每个窗口都有一个系统消息标签。
我有一个通用方法的GenUtil类,其中一个在调用该方法的控制器中设置系统消息。
如果我将控制器引用传递给方法,则设置系统消息是可行的。
在加载FXML时创建对数据输入窗口控制器的引用:
deWindowController = loader.getController();
在数据输入窗口控制器中:
genUtil.setSystemMessage(this);
在GenUtil中:
public void setSystemMessage(FXMLDEWindowController deWindowController) {
deWindowController.lblSysMsg.setText("setting the message");
}
但是,许多FXML控制器将调用setSystemMessage方法,我无法弄清楚如何“通用化”此过程。
1)方法参数中的内容:
public void setSystemMessage(**<WHAT_GOES_HERE?>** controllerRef) {
2)假设系统消息标签ID都是lblSysMsg,是否可以像以前一样使用controllerRef来设置消息标签?
我可以在GenUtil类中包括对所有控制器的引用,并且在每个控制器中,当我调用setSystemMessage方法时,传递一个包含数据输入窗口名称的字符串。这样,我可以手动确定要使用哪个控制器。但是,我正试图避免这种情况。
有人可以帮忙吗?
我正在使用JavaSE8和NetBeans8.2。
答案 0 :(得分:1)
您不应提供对字段的直接访问。这将允许该类的用户处理该字段,包括将其设置为null
或修改text
属性以外的属性。
在控制器的普通超类型中声明setSystemMessage
方法。如果所有控制器都包含相同的字段,那么抽象类将是避免重复的理想选择,但您也可以使用接口。
将此超级类型用作controllerRef
参数的类型:
public void setSystemMessage(SuperType controllerRef) {
controllerRef.setSystemMessage("setting the message");
}
public abstract class SuperType {
@FXML
private Label lblSysMsg;
public void setSystemMessage(String message) {
lblSysMsg.setText(message);
}
}