添加动作侦听器的语法

时间:2013-08-07 20:12:11

标签: java swing syntax jbutton actionlistener

当我输入以下代码时:

JButton aButton = new JButton("Button");
aButtin.addActionListener(this);

我的IDE(NetBeans)强调这是一个泄漏的声明。 虽然使用语句似乎从来没有任何负面影响,但我读过的一些文档表明,更合适的方法是将动作侦听器添加为实现ActionListener的内部类的新实例。 NetBeans和这些文档知道我不知道什么? 漏掉这个陈述的真正含义是什么? 我是否会以这种方式使用这种方式而产生负面影响?

3 个答案:

答案 0 :(得分:4)

有三种方式

    如果类声明包含aButton.addActionListener(this);并且implements ActionListener也,则
  • public void actionPerformed(ActionEvent ae) {

f.i。伪代码

public class ButtonDemo implements ActionListener{

    aButton.addActionListener(this);    

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source == aButton) {

        } 
    }
}
  • aButton.addActionListener(new ButtonPress());是ActionLIstener被声明为单独的类
  • 的情况

f.i。伪代码

public class ButtonDemo {    
     aButton.addActionListener(new ButtonPress());
}

public class ButtonPress implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}
  • 更简单,清晰且无副作用(按两种方式)是创建内部匿名监听器

f.i。伪代码

    aButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

        }
    });

答案 1 :(得分:2)

如果使用this,那么为了使this能够处理来自多个源的ActionEvent,您需要添加逻辑来检查操作的源或命令字符串。这非常合理。

如果您使用其他类,则可以使用在其他地方实现的ActionListener,或者重用为特定目的而设计的ActionListener,或者定义例如匿名内联类内联,在您的情况下可能很方便。这也是完全合理的。

不要考虑“优势”或“劣势” - 这是一个常见的错误(做xyz是“坏”吗?xyz是“良好做法”吗?)。您可以使用对您的情况最有意义的任何内容,并提供最清晰,最易维护,功能正常的代码。有常识,熟悉你正在使用的语言和可用的选项,做出明智的判断。语言是表达想法,清楚地说出(打字)的一种方式。

答案 2 :(得分:1)

我猜使用内部类实现的一个缺点是,侦听器不能重用于其他按钮,以防它们应该具有相同的侦听器。 像这样:

Can you use the same OnClickListener for different buttons?