【发布时间】:2017-06-15 04:46:16
【问题描述】:
我现在关心 2 个对象:一个控制器和一个创建事件的类。
我已经在源类中使用了一个 ActionListener 变量,由控制器中的匿名 ActionListener 对象和方法设置。
但我需要访问控制器中源类的数据。我能够扩展 EventListener 并使用自定义 EventObject,但这对于一点数据来说似乎有点矫枉过正。
有没有一种简单的方法来扩展 ActionEvent 并创建一个我可以在侦听器的 actionPerformed() 方法中访问的额外变量? ActionEvent 的构造函数只是让我感到困惑。
public class NotesEvent extends ActionEvent{
public NotesEvent(Object source, int id, String command){
super(source, id, command);
}
}
我不知道在实例化事件时为“标识符”传递什么。
也许我错过了一些简单的事情 - 我只是在很长一段时间内真正学会了使用自定义类来做到这一点。
任何帮助将不胜感激
【问题讨论】:
-
更具体的解释和minimal reproducible example 代码可能会极大地帮助我们更好地理解您的问题和您的代码。
-
现在添加一个
-
是否需要自定义事件类?听起来您可以将常规 ActionEvent 的源转换为您已经知道源的任何类型,然后直接访问其数据。
-
我不完全确定 - 现在我认为我已经解决了这个问题:我没有降低 ActionEvent 子类。但我很想知道我是否以一种明智的方式做到了这一点(在尝试使事情松散耦合时尽可能明智)。我把代码放在下面
-
好吧,你可以,但是
ActionListener#actionPerformed仍然会得到ActionListener的实例 - 所以你遇到了你的代码不是“自我记录”的问题,因为其他人怎么想要知道他们需要转换ActionListener的实例。id是ActionEvent.ACTION_FIRST、ActionEvent.ACTION_LAST、ActionEvent.ACTION_PERFORMED之一——请查看 JavaDocs 中的描述。我的直觉是考虑自定义侦听器/事件对象,这样就可以更容易理解 API 的意图,而无需“猜测”