向那里的Swing大师大喊一声!!
我已经做了几年的Swing编程,但一直都不清楚这一点。
如您所知,Swing / AWT为您提供了几种在单击按钮时执行特定操作的方法。我已经看到它在我所使用的应用程序中完成了几种不同的方式。我目前正在开展的项目倾向于采用这种方法:
someButton.setActionCommand("mycommand");
someButton.addActionListener(listener);
- 剪断 -
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if (command.equals("mycommand"))
doThis();
else if (command.equals("someothercommand"))
doThat();
etc.
这对我来说似乎有些笨拙 - 这种编程方式有什么好处,还是使用Swing Action
更好?
或者有不同的情况,不同的方法更好/更差?
答案 0 :(得分:4)
IMO,最好为Actions使用单独的侦听器。
通过这种方式,您可以在Swing中留下应该采取的行动。您无需比较字符串来决定要做什么。
让一个巨大的ActionListener
进行多次动作感觉就像打破了我的模式。
答案 1 :(得分:3)
从设计的角度来看,我认为最好有一个类来处理组件的一个特定操作,而不是一个类是“让我们处理所有组件的所有组件”类型的设计。
此外,如果你使用Action
,你可以a)将它应用于多个组件(例如按钮和菜单项)b)调用setEnable
为所有组件启用/禁用它附加到和c)还使用它来定义其附加的组件的各种设置(即文本标签,工具提示文本,加速键,图标等)。最后一个是通过putValue
方法完成的,再次调用此方法将更改其附加到的所有组件的设置。
具体来说,我建议根据您的需要继承AbstractAction
。
答案 2 :(得分:1)
我知道这是演示代码,但是因为你正在研究这些东西,我想我会提到如果你不小心的话,摇摆往往是重复的。
使用Action类可以让您更好地重构。在开始时,最好的方法之一是确保代码中没有字符串。几乎每个“新”都将处于某种循环中,从数据集中读取(通常数据集就像数组一样简单) - 一旦你开始从这样的数据集中读取,动作可以帮助你很多。
您可以使用数据创建操作,创建控件的数据以及将两者关联起来的数据 - 这样您就可以最终接近(或处于)0行代码以获得新控件。
一旦你开始以这种方式编程并且可以看到模式,它至少与重复方式一样快,而且更不容易出错。
答案 3 :(得分:0)
如果您有多个执行相同操作的按钮或组件(例如,同一页面上的多个退出按钮将使用相同的代码),则它很有用。
将它们全部设置为相同的动作命令,它们将在侦听器中使用相同的代码
JButton.addActionListener(this);
JButton2.addActionListener(this);
JButton.setActionCommand("exit");
JButton2.setActionCommand("exit");
public void ActionPerformed(ActionEvent e){
if(e.getActionCommand=="exit")
System.exit(0);
}