在构建GUI时,该界面需要一种侦听和响应事件的方式。当用户与GUI交互时,会触发事件,例如按下按钮和插入文本。Java Swing中的事件类型之一是ActionEvent。生成ActionEvent的常用组件是JButton,它只是一个按下按钮即可生成事件的按钮。本文旨在说明可以将ActionListener添加到组件的三种不同方式。
组件作为ActionListener
这是组件本身侦听动作的时候。为此,只需在组件中实现ActionListener接口,例如:
<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>public class ButtonExample extends JButton implements ActionListener {
public ButtonExample() {
addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
//handle event here
}
}
</code></span></span>
因此,实现ActionListener的组件将同时成为源和侦听器。如果事件相对简单且内部发生(例如,未连接多个组件),则可能需要使用此方法。
这种添加ActionListener的方法违反了单一职责原则,因为组件既负责创建事件,又负责处理事件。
内部ActionListener
当您使用'new'关键字为每个组件创建一个新的ActionListener时,就使用此方法。
<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>component.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
//handle event here
}
});
</code></span></span>
此实现非常适合简单的侦听器,并且还将侦听器与组件分开。如果尝试将ActionListeners添加到子组件(例如,JPanel的子组件),请避免这种情况。这可能会导致代码混乱,因为每个组件都在创建自己的ActionListener版本。
单独的ActionListener
此技术要求您创建一个单独的类来实现ActionListener。需要此ActionListener的组件只需创建此类的新实例并将其添加。
<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>public class ButtonExample extends JButton {
public ButtonExample() {
addActionListener(new ButtonHandler());
}
}
public class ButtonHandler implements ActionListener {
public ButtonHandler() {
}
public void actionPerformed(ActionEvent ae) {
//handle event here
}
}
</code></span></span>
这是添加ActionListener的最干净的方法。它将组件与侦听器分离,创建可在不同类之间使用的可重用侦听器,并允许组件之间进行复杂的交互。
原文链接:https://dev.to//aussieguy/three-ways-to-add-an-actionlistener-in-java-swing-19h5