有共同或单独的actionPerfomed方法有什么区别

时间:2013-05-13 17:51:04

标签: java swing jbutton actionlistener

请帮助我理解在以下两种方法中将动作侦听器添加到JComponent之间的区别。

第一种方法:将actionListener实现到我的类并添加公共actionPerformed方法,根据事件选择选择

class Test implements ActionListener  
{
    JButton jbutton = null;
    public Test(){
        jbutton = new JButton();
        jbutton.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e){
        //Perform operation here;
    }
}

第二种方法:为单个JComponent定义动作侦听器。

JButton jbutton = new JButton();              
button.addActionListener(new ActionListener() {         
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        //Perform operation here    
    }
});

这两种方法有什么区别,哪种方法更清洁,更易于维护?如果涉及到任何效率方面的好处?

1 个答案:

答案 0 :(得分:3)

如果符合以下条件,我会选择第一种方法:

  • 该动作是通过不同的事件触发的。例如,您有一个操作,可以将GUI的语言从英语更改为阿拉伯语(您需要重新排列组件以从右到左排列),并且可以通过某些key bindings类似( Alt + R)并通过JMenuItem,也许通过一些按钮。

  • 多个操作具有相同的基本代码。例如,计算器应用程序,其中每个数学运算按钮将触发相同的操作,并根据操作命令,您可以从actionPerformd()内部确定操作。他们共享GUI更新。

如果出现以下情况,我会选择第二种方法:

  • 该操作仅与一个事件相关联,您希望即时编写。

我不会做的是类似的事情:

public class MainFrame extends JFrame implements ActionListener

但我会写:

public class CustomListener implements ActionListener

另见: