addActionListener的作用是什么?

时间:2010-01-30 11:42:05

标签: java button

我有以下代码:

JButton button = new JButton("Clear");
button.addActionListener(this);

据我所知,我创建了一个按钮,上面写着“清除”。然后我必须将一个动作与此按钮相关联(如果按下该按钮会发生什么)并且由addActionListener完成。是不是?

但我不明白的是指定了行动的地方。按下按钮应该清除文本区域,据我所知,应该有一个代码清除文本区域。但在给定的示例中, addActionListener() 的参数中只有“this”。

程序如何知道按下按钮时应该清除文本区域?

如果需要,则会给出完整代码here

5 个答案:

答案 0 :(得分:16)

ActionListener是一种回调机制。每当添加一个控件来触发ActionEvent时,都会调用public void actionPerformed(ActionEvent e)方法。

  

我不明白的是调用actionPerformed的位置。我看到它是在类中定义的,但没有调用此方法的地方。

这是由UI组件的内部机制调用的。从概念上讲,您可以将代码看起来像这样:

public class Button {
  private final List<ActionListener> listeners = new ArrayList<ActionListener>();

  public void addActionListener(ActionListener l) {
    listeners.add(l);
  }

  public void click() {
    ActionEvent event = new ActionEvent(this, 0, "click");
    for (ActionListener l : listeners) {
      l.actionPerformed(event);
    }
  }
}

答案 1 :(得分:2)

每个JButton都有一个EventListenerList。调用addActionListener(this)会将您的ActionListener(一个名为actionPerformed()的回调函数)添加到列表中。您可以看到调用方法here的代码大纲。实际的fireActionPerformed()方法位于AbstractButtonJButtonJComponent,您可以在使用事件侦听器列表机制的各个类中see listed

答案 2 :(得分:1)

您致电button.addActionListener( this ),因为this实施了接口ActionListener。单击该按钮时,将调用方法actionPerformed(ActionEvent e)(由接口定义并由您的类实现)。

答案 3 :(得分:0)

事件生成器被告知可以处理其事件的对象 事件生成器有一个方法; - addActionListener(对Handler类对象的引用) 例如,

JButton b1=new JButton("My Button");
 b1.addActionListener(this); // Please note listener and generator are same class

由于事件处理程序位于包含的同一对象中 按钮,因此我们必须使用this来传递参考。

答案 4 :(得分:0)

基本上,UI事件处理的机制是JVM队列事件,每种类型的事件都有其订阅者。触发事件时,如单击按钮,JVM将相应地将处理委派给事件的订户。此订阅者类必须定义方法或事件处理程序来处理事件。

在你的情况下,在打电话时     button.addActionListener(本); 代码实际上将此KeyEventDemo实例订阅到click类型的事件。然后,当单击该按钮时,将触发KeyEventDemo的actionPerformed方法。