我正在尝试为我遇到的问题创建一个看起来不错的解决方案。我可以用文字解释,但是代码会更清晰:
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)。
最佳答案
如果您需要使用相同的监听器,则要求类似于 visitor或double-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/