如何在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 } }