0

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

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 类)。

4

2 回答 2

3

如果您需要使用相同的侦听器,则该需求类似于访问者双重调度模式。您应该重定向回源类,例如

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

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

于 2012-10-22T08:58:48.727 回答
1

为每个可能的源使用不同的侦听器实例并完全避免该问题。

于 2012-10-22T09:01:29.820 回答