4

假设我有一个名为 button1 的按钮。如果我想为按钮创建一个actionListener,我应该选择哪种方法:(在第二个中,你必须扩展actionListener接口)

// Imports
public class Test{
    JButton test = new JButton();
    Test(){
        // Pretend there is an adapter
        test.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                ...
            }
        });
    ...
}

或者

// Imports
public class Test2 extends ActionListener{
    JButton button2 = new JButton();
    Test2(){
        button2.addActionListener(this);
    }
    // Pretend there is an adapter

    public void actionPerformed(ActionEvent e){
        Object src = e.getSource();
        if(src == button2){
            ...
        }else{
            ...
    }
}
4

3 回答 3

3

去第一个。您不应该让您的 GUI 类也实现您的侦听器,因为这要求 GUI 或视图类做太多事情。通过分离您的侦听器代码,即使它位于匿名侦听器类中,以后如果您想将侦听器代码与视图代码完全分离,您也会有更轻松的时间。

于 2012-05-07T22:35:22.683 回答
3

在第二种情况下,您必须实现ActionListener接口。除此之外,答案是“视情况而定”。如果为多个图形组件重用相同的动作监听器是有意义的,那么使用第二个版本。如果处理事件是单个组件的一次性事件,则使用第一个版本。

于 2012-05-07T22:36:46.897 回答
1

如果每个侦听器都是唯一的,您可能希望使用匿名类(第一个示例)。如果您不得不一遍又一遍地重写相同的代码,那么在命名类中实现它(如在您的第二个示例中)会更好,这样您就可以重用相同的侦听器。

但是,与其扩展 ActionListener(如第二个示例中那样),您可能会发现将侦听器实现放入不同的类(甚至是实现 ActionListener 的内部类)可以更好地逻辑分离您的代码。

于 2012-05-07T22:40:07.003 回答