如何在Java中实现动作监听器

时间:2020-02-23 14:33:54  来源:igfitidea点击:

当用户执行某种操作时,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
}
}