事件机制
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,
"你的输入的账号和密码错误,请重新输入!");
}
}
}
}
相关推荐
JavaScript 事件机制详细研究 JavaScript 事件机制是指浏览器中发生的各种事件,例如点击、鼠标悬停、键盘输入等,JavaScript 通过捕捉这些事件来执行相应的操作。本文将详细介绍 JavaScript 事件机制的实现方式和...
openlayer 事件机制的介绍,事件机制对于学习地图有很大的关系,初学者需要看一看。
java 事件机制 观察者模式java 事件机制 观察者模式
C# 事件机制归纳 C# 事件机制是指在 C# 编程语言中实现事件处理的机制,包括委派、事件和事件处理过程。以下是对 C# 事件机制的详细归纳: 一、委派 委派是指一种特殊的方法签名,可以将方法作为参数传递,用于...
Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...
react native 触摸事件机制详解,及高仿微信通讯录功能。
这是一本描写Qt中的事件机制的PDF文档。
安卓事件机制的描述,包括安卓的进程通信机制、view事件的传递机制以及安卓的广播机制。
linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络编程框架(C++)基于Reactor事件机制,支持线程池,异步非阻塞,高并发,高性能。linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络...
jQuery第4天知识点:jQuery节点操作、jQuery特殊属性操作、jQuery事件机制.zip
9.1事件机制与原理分析 9.1.1 什么是Qt事件驱动? 我们在写Qt工程类项目的时候都会发现,主程序里面都有这么一段代码: int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w....
Qt事件机制浅析
Java中的事件、事件监听器的简单实现例子,希望对新人有所帮助吧。
flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发
快速掌握flex的事件机制,让你灵活运用flex的事件完成所有功能。
关于Android触摸事件机制 关于Android触摸事件机制 关于Android触摸事件机制
as3事件机制 观察者模式 as3事件机制 观察者模式
Java + C# 事件机制理解
AUTOSAR 事件机制 系统的介绍
C#实现的基于观察者模式的事件机制,unity可用。分2个文件,事件和事件中心。事件中心保存有对所有事件(Observer)的引用,事件中心负责对这些事件进行分发,这样每个事件就可以通过回调函数的方式进行更新(传递...