java - 具有多个输入选项的 ActionEvent e.getsource()

标签 java events awt actionlistener

我正在尝试为我遇到的问题创建一个看起来不错的解决方案。我可以用文字解释,但是代码会更清晰:

public void actionPerformed(ActionEvent e) {       
        if(e.getSource().equals(ClassA.getButtonOne()) ||
            e.getSource().equals(ClassB.getButtonOne())) {         
            ???????.setEnabled(false);          (class a or class b)
        }

说明:如何将 e.getSource() 更改为正确的类类型,以便我可以对其执行方法?一个额外的细节:我确信 if 语句中的所有方法都拥有我想要执行的方法,在上面的示例中“setEnabled”。我可以通过创建多个 if 语句来解决该问题,但这会创建重复的代码(特别是因为将来还会有类 C 和 D)。

最佳答案

如果您需要使用相同的监听器,则要求类似于 visitordouble-dispatch图案。您应该重定向回源类,例如

public void actionPerformed(ActionEvent e) {       
        Object source = e.getSource();
        if (source instanceof MySource) {
           ((MySource)source).executeOnEvent(e, this);
        }
         ....

这样您就不必实现大量的“if”(正如您所发现的,这很容易出错且冗长)。您只需在收到事件时检查对象类型,然后在适当的情况下回调它。请注意,我在上面回调了事件和接收事件的对象。但是,您可以选择哪些参数是重要/相关的。

关于java - 具有多个输入选项的 ActionEvent e.getsource(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007875/

相关文章:

java - 在 Maven Repo 上找不到 'javaxt-core'

Java - 在所有线程完成后等待初始化 Activity

java - 从字符串数组中删除空元素,其中 "All elements are null"

c# - 使用事件序列化类

Java - AWT 从 1.4 到 1.5 的差异(适用于 Unix 和 Windows)

java - 在框架中的面板中绘图,我有标题,但冒号到目前为止不起作用

java - 简易计算器不打印答案?

c++ - 枚举所有 T 的所有 SomeClass<T> 对象

python - 从许多网页中获取数据的最佳方式(线程/事件驱动)

java - 从 java 程序关闭特定 URL 的 Web 浏览器