动作命令与动作类?

时间:2009-07-30 18:32:36

标签: java user-interface swing

向那里的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更好?

或者有不同的情况,不同的方法更好/更差?

4 个答案:

答案 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);
}