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

djm*_*gal 5 java swing class-design jbutton actionlistener

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

基本上,我有一个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 */ }
}
Run Code Online (Sandbox Code Playgroud)

点击时是否有更有效的方法来处理每个按钮的响应?我们的想法是,无论何时点击一个按钮,都会打开一个新窗口,让用户执行与该按钮相关的各种任务.我想在某种程度上getActionCommand()Class.forName()/ newInstance()方法结合使用,但我不确定是否有另一种(或更简单)的方法来做这样的事情.

Hov*_*els 7

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

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