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()
方法在AbstractButton
。 JButton
是一个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方法。