事件机制
1.事件源对象(事件的接收者):
凡是可以接受鼠标和键盘操作的都可以成为事件源对象(窗体上的标签,输入框,按钮等窗口界面类上的组件),被操作的这个对象就是该事件的事件源。
2.监听器(事件的传递者,将动作传给事件处理对象):
每一个事件源对象都需要一个监听方法来监听事件源对象上发生的操作,通过绑定不同类型的Listner可以监听事件的不同信息(因为每个listner的功能不同)。
通俗的讲相当与对事件源有一堆手下,每个手下都能监听不同的信息,根据不同的需要我们需要指派不同的手下去监听。(而且这个手下还能将监听到的东西交给对应的人处理)
事件源对像.addActionListener(ActionListener al) 另外一些常用的监听方法: //比较有用的手下
事件源对象.addMouseListener(MouseListener al);
事件源对象.addMouseMotionListener(MouseMotionListener al);
事件源对象.addKeyListener(KeyListener al);
3.事件处理对象(事件的最终处理者):
现在我们与要一个对象来处理监听到的事件(对事件源对象上的操作给予处理并向用户反馈信息),这就是上面监听方法中的参数ActionListener al。你的手下会将监听到的事件交给这个参数处理。 a1是实现了对应接口的类(该接口具备对监听到的信息进行处理的能力,这样这个类具备了处理该事件的能力)的一个实例化对象。该对象用来对监听到的事件进行处理。
4.事件流程:
在事件源对象上发生操作 -〉事件源对象将通过监听方法将收集到的事件源对象的信息及接受的操作,发送给监听方法中的参数(事件处理对象)进行处理 -〉事件处理对象根据传递过来的信息自动调用对应的事件方法对事件进行处理。
事件源与监听器的关系:
事件源和监听器并不一定是一对一的关系,可以一个事件源绑定多个监听器,一个监听器也能监听多个事件源(这种情况在处理时间时就要判断是那个事件源传递过来事件)。
5.参数传递:
事件处理类对事件进行处理是一般需要用到事件源对象的方法和属性,所以我们需要把事件源对象传递给事件处理类。
事件机制中参数传递主要是通过构造方法进行传递。
6.适配器:
我们的事件处理对象都要实现相应监听器的接口才有能力处理相应的事件,但是我们可能只对其中的某个方法感兴趣,但是又不得不讲接口中的所有抽象方法进行重写。这时我们就可以使用适配器,Java.awt.event包提供了一系列的适配器类(KeyAdapter,MouthAdapter等),每个适配器类都对相应监听起接口中的所有方法进行了空实现,我们只要继承该适配器类就可以只对我们感兴趣的方法进行重写。但对于只有一个抽象方法的监听器接口没有提供与之相对应的适配器。
使用适配器有他的好处但也有缺点,那就是适配器是类,我们只能进行单继承,这样造成一个类只能处理一类事件(例如继承了MouthAdaper就只能对鼠标的操作,单击,双击等做出反应,而不能对键盘输入做出反映),而用接口的话,可以同时实现keyListner和MouthListner,当然这种情况比较少,因为类的职责越单一越好。
6.事件处理的三种处理方式:
内部类实现方式;匿名内部类实现,还有就是我们刚说的直接实现(用一个类实现相应接口,或继承相应适配器)
ps:还可一直接实现和内部类实现相结合,在直接实现的那个类中定义多个内部类实现统一个接口,对接口中的同一个方法进行不同的重写,这样就可以在一个类中对同一个事件做出不同的响应。
以上对事件机制的处理总结感觉说的太啰嗦了,还是直接用代码说明吧
登陆界面类:
package Exercise1;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 定义一个登录界面类
* @author Administrator
*
*/
public class Login {
public static void main(String[] args){
Login login = new Login();
//初始化登陆界面
login.showFrame();
}
public void showFrame(){
//创建一个窗体
JFrame lg = new JFrame();
//设置窗体的属性值
lg.setTitle("登录界面");
lg.setSize(200, 200);
lg.setDefaultCloseOperation(3);
lg.setLocation(450, 350);
lg.setResizable(false);
//设置窗体布局
java.awt.FlowLayout fl = new java.awt.FlowLayout();
lg.setLayout(fl);
//创建添加账号密码标签及输入框
JLabel jl = new JLabel("账号");
JTextField txtName = new JTextField(12);
JLabel jl_pass = new JLabel("密码");
JPasswordField jpf = new JPasswordField(12);
//将该输入框放入窗体
lg.add(jl);
lg.add(txtName);
lg.add(jl_pass);
lg.add(jpf);
//添加按钮
JButton dl = new JButton("登录");
dl.setActionCommand("login");//这是给计算机看的
lg.add(dl);//将按钮放入窗体
//设置窗体的可见性
lg.setVisible(true);
//实例化事件的处理对象
LoginListener lo = new LoginListener(txtName,jpf);
//给事件源对象增加监听方法
dl.addActionListener(lo);
jpf.addActionListener(lo);
}
}
事件处理类:
package Exercise1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 登录界面的处理类,实现ActionListener接口
* @author Administrator
*
*/
public class LoginListener implements ActionListener {
//账号和密码输入框对象
private JTextField txtName;
private JPasswordField jpf;
//事件处理类的构造方法
public LoginListener(JTextField txtName,JPasswordField jpf){
this.txtName = txtName;
this.jpf = jpf;
}
//事件处理方法
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();//得到开始设置的comand // dl.setActionCommand("login");//这是给计算机看的
//输出信息
System.out.println("你点击了"+e.getActionCommand()+"按钮");
//获取账号和密码输入框中输入的值
String name = txtName.getText();
char[] passWord = jpf.getPassword();
//判断账号密码是否输入正确
if(command.equals("login")){
if(name.equals("admin") && pwd.equals("admin")){
//显示一个画板
JFrame jf = new JFrame("画板");
jf.setSize(300, 300);
jf.setDefaultCloseOperation(3);
jf.setLocation(300, 300);
jf.setVisible(true);
} else{
JOptionPane.showMessageDialog(null,
"你的输入的账号和密码错误,请重新输入!");
}
}
}
}
相关推荐
Java中的事件机制是Java编程中一个重要的概念,它基于观察者模式(Observer Pattern)来实现对象之间的通信。观察者模式是一种行为设计模式,允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的...
JavaScript 事件机制详细研究 JavaScript 事件机制是指浏览器中发生的各种事件,例如点击、鼠标悬停、键盘输入等,JavaScript 通过捕捉这些事件来执行相应的操作。本文将详细介绍 JavaScript 事件机制的实现方式和...
事件机制是OpenLayers的核心部分,它使得用户与地图进行交互成为可能。在OpenLayers中,事件机制主要涉及到控件(Controls)和处理器(Handlers)的概念。 控件在OpenLayers中扮演着重要的角色,它们是附加到地图上...
Java事件机制基于观察者模式,其中事件源(如按钮)会发布事件,而事件监听器则订阅这些事件并执行相应的操作。 事件、事件监听器和事件源是Java事件处理的三个核心概念。事件是用户或系统发生的某种情况,如鼠标...
### Qt中的事件机制详解 #### 一、事件的分类与特性 在Qt中,事件机制是框架的核心之一,用于管理用户界面与用户的交互过程。事件根据其产生方式的不同,可以分为三类:自发事件(Spontaneous events)、发布事件...
本文将深入探讨React Native的触摸事件机制,并展示如何利用这一机制实现类似微信通讯录的功能。 首先,我们要了解React Native中的触摸事件系统。与Web开发中的点击事件不同,React Native使用了一套基于 ...
C# 事件机制归纳 C# 事件机制是指在 C# 编程语言中实现事件处理的机制,包括委派、事件和事件处理过程。以下是对 C# 事件机制的详细归纳: 一、委派 委派是指一种特殊的方法签名,可以将方法作为参数传递,用于...
Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...
Spring框架的事件机制是其核心特性之一,它提供了一种基于发布-订阅模式的事件处理方式,使得在Spring应用中的不同组件之间可以进行解耦通信。这个机制允许一个组件(通常是一个服务)触发一个事件,然后其他感兴趣...
使用Spring事件机制实现异步的方法 Spring框架提供了一种事件机制,允许开发者将代码解耦合,实现松散耦合的设计理念。这里将详细介绍如何使用Spring事件机制实现异步的方法。 事件机制的实现主要包括三个部分:...
安卓事件机制的描述,包括安卓的进程通信机制、view事件的传递机制以及安卓的广播机制。
### Qt事件机制浅析 #### 一、什么是事件? 在Qt框架中,事件是指系统或应用程序内部发生的某种“动作”,这种“动作”需要被特定的对象所感知并作出响应。这里的“动作”是一种广义上的概念,既包括用户交互操作...
Flex4.5事件机制是Flex应用程序开发中的核心组成部分,它基于ActionScript 3.0的事件模型,并且遵循DOM3级事件规范。事件机制使得开发者能够轻松响应用户交互和系统事件,为Flex程序员提供了强大且直观的处理工具。 ...
在上一个版本的事件机制中,可能涉及了复杂的事件监听器和触发器的实现,而在这个版本中,主要目标是简化这一过程。我们来看一下具体实现。 首先,定义了一个名为`Event`的类,它继承自`stdClass`。`Event`类有两个...
在Android开发中,事件机制是应用交互的核心部分,它使得用户与应用程序之间的沟通变得顺畅。这个"Android事件机制测试项目"旨在深入理解并实践这一关键功能。以下将详细阐述Android事件处理的相关知识点。 首先,...
在IT领域,线程同步和事件机制是多线程编程中的关键概念,特别是在Windows系统下,Visual C++提供了丰富的工具来实现这些功能。本项目"Visual C++事件机制线程同步工程"着重于如何利用事件对象(CEvent)进行线程间...
【Flex 事件机制详解】 Flex 事件机制是 Flex 应用程序中不可或缺的一部分,它使得组件之间能够有效地通信,响应用户交互以及管理应用程序状态。在深入理解 Flex 事件机制之前,我们需要先了解一下基本概念。 1. *...
### JavaScript事件机制详解 #### 一、引言 在学习编程语言的过程中,"事件"这一概念往往是初学者遇到的一个难点,然而它又是编程中极为重要的一个组成部分。在JavaScript中,事件处理更是不可或缺的一部分,它是...
### Flex事件机制详解 #### 一、事件简介 在Flex框架中,事件是应用程序与用户交互的核心机制之一。它可以由多种触发源启动,包括但不限于用户的输入(如键盘按键、鼠标点击)、外部数据加载完成(例如WebService...
Flex事件机制是Adobe Flex应用程序开发中的核心组成部分,它允许组件之间进行有效的通信和交互。对于初级Flex程序员或爱好者来说,理解这一机制至关重要。在本文中,我们将深入探讨Flex事件的各个方面,包括事件流、...