0

我正在编写一个小型 Java 应用程序(在 Windows 上,因此在我的名字后面附加了 _on_vista)。

我有 3 个按钮,所有这些按钮都会对点击事件做出反应,但会做不同的事情。

以下代码是公认的方式还是我不知道的更清洁的方式?一方面,它有效,另一方面,似乎有些不对劲......

谢谢

cool_button_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        coolfunction1();
    }
});

cool_button_2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        coolfunction2();
    }
});

// etc ...

被调用的函数将根据需要产生线程,依此类推。

更新- 两者都是很好(几乎相同)的答案。我接受了代表较低的那个来分享财富。再次感谢各位。

4

5 回答 5

3

是的,这是正确的方法。这有点笨拙(必须编写五行长代码才能调用方法)但那是 Java :(

于 2009-02-19T14:12:10.717 回答
1

这还不错。我更喜欢使用Actions并从中创建JButtons :

Action fooAction = new AbstractAction() { ... };
JButton fooButton = new JButton(fooAction);
于 2009-02-19T14:18:23.073 回答
1

它是正确的方法之一。

您正在使用匿名侦听器,但有一个替代方案

在http://java.sun.com/docs/books/tutorial/uiswing/events/intro.html上很好地解释了

您在其中编写一个实现 ActionListener 并让它为您处理逻辑的类

于 2009-02-19T14:20:44.113 回答
0

我会说代码很好,就像 Java 代码一样。这是 Java 经常受到批评的冗长的一个很好的例子——在这种情况下,由于缺少闭包。

于 2009-02-19T14:12:53.477 回答
0

我倾向于做这样的事情:

public class ButtonPanel implements ActionListener {
    JButton button1, button2, button3;
    public ButtonPanel() {
        button1 = new JButton(this);
        button2 = new JButton(this);
        button3 = new JButton(this):
        ...
    }

    public void ActionPerformed(ActionEvent e) {
        if( e.getSource() == button1 ) action1();
        else if( e.getSouce() == button2  ) action2();
        else if( e.getSource() == button3 ) action3();
    }
}
于 2009-02-19T14:57:13.633 回答