是否有一种更有效的方法来处理按钮单击事件而不是几个if语句?

时间:2014-05-01 01:17:07

标签: java swing jbutton actionlistener class-design

所以,我会尽力解释这个问题......

基本上,我有一个GUI,其主窗口上有几个按钮(可能大约10个)。我将按钮本身放在一个数组中,但是当处理每个按钮的点击事件时,根据点击的按钮会发生不同的事情。

而不是做这样的事情:

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Button1Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button2Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button3Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button4Text") { /* do stuff */ }
}

点击时,是否有更有效的方法来处理每个按钮的响应?我们的想法是,无论何时点击一个按钮,都会打开一个新窗口,让用户执行与该按钮相关的各种任务。我正在考虑以某种方式将getActionCommand()Class.forName() / newInstance()方法结合使用,但我不确定是否还有其他(或更简单)方法可以执行此类操作

1 个答案:

答案 0 :(得分:7)

您展示的ActionListener有时被称为“交换机监听器”,您认为可以对其进行改进是正确的。这是非常严格的代码,使得调试和增强变得困难。

我认为最好不要让GUI实现ActionListener,而是为每个按钮使用独特的Actions(即AbstractActions),然后将相应的Action插入相应的按钮。要使用最小耦合进行插入,请考虑使用依赖注入Spring或Guice。