所以,我会尽力解释这个问题......
基本上,我有一个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()
方法结合使用,但我不确定是否还有其他(或更简单)方法可以执行此类操作
答案 0 :(得分:7)
您展示的ActionListener有时被称为“交换机监听器”,您认为可以对其进行改进是正确的。这是非常严格的代码,使得调试和增强变得困难。
我认为最好不要让GUI实现ActionListener,而是为每个类按钮使用独特的Actions(即AbstractActions),然后将相应的Action插入相应的按钮。要使用最小耦合进行插入,请考虑使用依赖注入Spring或Guice。