addActionListener的作用是什么?

我有以下代码:

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

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

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

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

如果需要, 这里给出完整的代码。

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

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

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

 public class Button { private final List listeners = new ArrayList(); 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); } } } 

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

每个JButton都有一个EventListenerList 。 调用addActionListener(this)会将ActionListener (一个名为actionPerformed()的回调函数addActionListener(this)添加到列表中。 您可以在此处查看调用方法的代码大纲。 实际的fireActionPerformed()方法在AbstractButtonJButton是一个JComponent ,您可以在使用事件侦听器列表机制的各个类中看到它们。

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

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

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

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

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