是否有将 FXML 控制器引用作为参数传递给方法的通用方法?

Is there a generic way of passing FXML controller references as parameters to a method?

我正在编写一个有很多数据条目的应用程序 windows,每个数据条目都有一个系统消息标签。

我有一个 GenUtil class 用于常用方法,其中之一在调用该方法的控制器中设置系统消息。

如果我将控制器引用传递给该方法,则设置系统消息有效。

加载 FXML 时创建对数据条目 window 控制器的引用:

deWindowController = loader.getController();

在数据条目中window控制器:

genUtil.setSystemMessage(this);

在 GenUtil 中:

public void setSystemMessage(FXMLDEWindowController deWindowController) {

    deWindowController.lblSysMsg.setText("setting the message");

}

但是,setSystemMessage 方法将从许多 FXML 控制器调用我不知道如何 "genericise" 这个过程,即

1) 方法参数中的内容:

public void setSystemMessage(**<WHAT_GOES_HERE?>** controllerRef) {

2)假设系统消息标签ID都是lblSysMsg,是否可以像以前一样使用controllerRef设置消息标签?

我可以在 GenUtil class 中包含对所有控制器的引用,并且在每个控制器中,在我调用 setSystemMessage 方法时传递一个包含数据条目 window 名称的字符串。这样我就可以手动确定要使用的控制器。但是,我正在努力避免这种情况。

有人可以帮忙吗?

我正在使用 JavaSE8 和 NetBeans8.2。

您不应提供对字段的直接访问。这将允许 class 的用户处理该字段,包括将其设置为 null 或修改 text 属性.

以外的属性

在控制器的通用超类型中声明一个 setSystemMessage 方法。如果所有控制器都包含相同的字段,抽象 class 将是避免重复的不错选择,但您也可以使用接口。

使用这个超类型作为 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);
    }
}