java - 是否有将 FXML 控制器引用作为参数传递给方法的通用方法?
问题描述
我正在编写一个应用程序,它将有许多数据输入窗口,每个窗口都有一个系统消息标签。
我有一个通用方法的 GenUtil 类,其中之一在调用该方法的控制器中设置系统消息。
如果我将控制器引用传递给方法,即设置系统消息有效。
在加载 FXML 时创建对数据输入窗口控制器的引用:
deWindowController = loader.getController();
在数据输入窗口控制器中:
genUtil.setSystemMessage(this);
在 GenUtil 中:
public void setSystemMessage(FXMLDEWindowController deWindowController) {
deWindowController.lblSysMsg.setText("setting the message");
}
但是,setSystemMessage 方法将从许多 FXML 控制器中调用,我不知道如何“通用化”这个过程,即。
1)方法参数中的内容:
public void setSystemMessage(**<WHAT_GOES_HERE?>** controllerRef) {
2)假设系统消息标签ID都是lblSysMsg,我可以像以前一样使用controllerRef来设置消息标签吗?
我可以在 GenUtil 类中包含对所有控制器的引用,并且在每个控制器中,当我调用 setSystemMessage 方法时,传递一个包含数据输入窗口名称的字符串。这样我就可以手动确定要使用哪个控制器。但是,我试图避免这种情况。
有人可以帮忙吗?
我正在使用 JavaSE8 和 NetBeans8.2。
解决方案
您不应提供对字段的直接访问。这将允许该类的用户处理该字段,包括将其设置为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);
}
}
推荐阅读
- node.js - express.js:我如何在 req.session 中存储数据?
- python - 使用python将输入发送到可执行文件
- php - 带有array_column的PHP array_multisort不起作用
- javascript - 如果值不为空/空,则 ReactJS MySQL 更新
- php - 在共享主机上发布 Laravel 8.0 (.htaccess?)
- sql - 如何从字符串中删除“”(引号)
- python - 为什么我会收到此 Python 日期时间错误?
- r - 当多个 = TRUE 时,闪亮的 selectInput 仅返回第一个值
- python - Julia 符号和数值性能与 Python
- python - 显示“$”符号和浮点数