如何在Java中实现动作监听器
当用户执行某种操作时,Java必须能够有效地处理它。
在这种情况下,Java中的动作侦听器非常有用。
动作侦听器简介
作为程序员,我们有责任定义动作侦听器可以为用户的操作做什么。
例如,让我们考虑一个简单的场景,其中用户从菜单栏中选择某个项目或者点击文本字段中的Enter键以转到新行。
一旦完成了此类用户功能,便会将"已执行操作"消息发送到相关组件中定义的所有相应的操作侦听器。
下面以图形方式描述了如何编写动作侦听器:
其中至关重要的组成部分是可以实现Action Listener接口的对象。
程序必须将该对象标识为按钮上的操作侦听器,但该按钮只是事件源。
因此,利用addActionListener方法,当用户单击按钮时,它会触发一个动作事件。
这将调用操作侦听器的actionPerformed方法。
请注意,它是ActionListener界面中的唯一方法。
该方法的单个参数是ActionEvent对象,该对象提供有关事件及其源的信息
动作事件类
| 方法 | 描述 |
| String getactioncommand() | 返回与此操作关联的字符串。大多数可以启动操作事件的对象支持一个名为setActionCommand的方法,允许我们设置此字符串。 |
| int getmodifiers() | 它返回一个整数,用户在动作事件期间按下该整数。一些ActionEvent定义的常量,如shift_mask,ctrl_mask,meta_mask和alt_mask用于确定按下的键。例如,如果用户选择菜单项,那么表达式是非零 |
| Object getSource()(在java.util.eventObject中) | 返回触发事件的对象。 |
用Java实现动作监听器
package com.javapointers.javase;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class ActionListenerTest implements ActionListener {
JButton button;
JFrame frame;
JTextArea textArea;
public ActionListenerTest() {
button = new JButton("Click Me");
frame = new JFrame("ActionListener Test");
textArea = new JTextArea(5, 40);
button.addActionListener(this);
textArea.setLineWrap(true);
frame.setLayout(new BorderLayout());
frame.add(textArea, BorderLayout.NORTH);
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
textArea.setText(textArea.getText().concat("You have clicked
the buttonn"));
}
public static void main(String args[]) {
ActionListenerTest test = new ActionListenerTest();
}
}
在上面的代码中,需要在一个类中实现一个动作侦听器,然后才能对其进行访问。
因此,请确保我们添加了Implements关键字和listener。
button.addActionListener(this)
这意味着组件按钮将包含在针对动作事件进行跟踪的组件中。
必须将组件添加到动作侦听器,以便我们在用户单击特定组件时添加代码。
未添加动作侦听器的组件将无法监控。
现在让我们看一下Java中动作侦听器的另一个简单示例及其工作方式。
范例2:
这里有3个简单的Java按钮对象,它们分别命名为Red,Green和Blue。
根据所单击的按钮,背景屏幕的颜色会发生变化。
下图描述了放置在本文档末尾的代码的相应输出。
仅显示了一个屏幕变为蓝色的实例。
通过实现此代码,可以查看其他颜色,例如红色和绿色。
按钮对象" rb"与ActionListener链接。
" this"参数表示ActionListener。
如果未完成链接,程序将显示3个按钮,但不进行事件处理。
ActionEvent类的getActionCommand()方法以字符串形式返回用户单击的相应按钮的标签。
import java.awt.*;
import java.awt.event.*;
public class ButtonDemo extends Frame implements ActionListener
{
Button rb, gb, bb; //the three Button reference variables
public ButtonDemo() //constructor to define the properties to a button
{
FlowLayout fl = new FlowLayout(); //set layout to frame
setLayout(fl);
rb = new Button("Red"); //convert variables into objects
gb = new Button("Green");
bb = new Button("Blue");
rb.addActionListener(this); //link Java buttons with ActionListener
gb.addActionListener(this);
bb.addActionListener(this);
add(rb); //add each Java button to the frame
add(gb);
add(bb);
setTitle("Button in Action");
setSize(300, 350); //frame dimensions, (width x height)
setVisible(true); //defining frame visible on monitor, default is setVisible(false)
}
//override only abstract method of ActionListener interface
public void actionPerformed(ActionEvent e)
{
String str = e.getActionCommand(); //to identify the button clicked
System.out.println("You clicked " + str + " button"); //
if(str.equals("Red"))
{
setBackground(Color.red);
}
else if(str.equals("Green"))
{
setBackground(Color.green);
}
else if(str.equals("Blue"))
{
setBackground(Color.blue);
}
}
public static void main(String args[])
{
new ButtonDemo(); //anonymous object of ButtonDemo to call the constructor
}
}

