4

请帮助我了解在以下两种方法中将动作侦听器添加到 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    
    }
});

这两种方法有什么区别,哪一种更清洁和可维护,是否涉及任何效率优势?

4

1 回答 1

3

如果出现以下情况,我会采用第一种方法:

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

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

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

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

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

public class MainFrame extends JFrame implements ActionListener

但我会写:

public class CustomListener implements ActionListener

另见:

于 2013-05-13T18:29:13.340 回答