-
2021-02-12 13:54:31
Java事件监听机制在Java图形界面编程处常用,比如我们写好这样一个图形界面程序:
我们会对界面进行一些操作,比如输入框中输入数据,点击登录按钮等,这些操作被称之为事件,当采取这些操作后,程序应会采取一定的措施响应。如:
那么在程序中是如何实现这个操作呢?
下面以点击登录按钮为例,讲述java事件监听机制(3种参与者、事件处理的实现步骤、事件的执行流程)。
1、事件监听机制的3种参与者
建立事件监听机制首先要明白什么是事件源对象,怎样为事件源对象添加事件监听方法及根据监听方法来确定事件接口。
1)事件源对象
什么是事件源对象:
事件源对象指触发事件发生的控件。所有的容器组件和元素组件都可以是事件源对象。本例中对应的事件源对象就是‘登录按钮’这一元素组件。
2)事件监听方法
在本例中,我们的需求是如果当登录按钮被点击,程序会采取相应操作。
这就需要我们为事件源对象(登录按钮)添加一个监视器,来监视事件源上是否发生了对应的动作。
它的作用是捕获发生在事件源对象上的动作,它具体由动作来确定。
格式(以ActionListener为例):
事件源对象.addActionListener(ActionListener
action)
本例为buttonLog(登录按钮对象)添加了一个监听方法。
//Java中,每个事件都对应有一个事件监听器,他们被定义在java.awt.event包中。
3)事件接口及实现(监视器类)
如果我们点击登录按钮后,程序采取对应的操作,我们必须要实现监听器接口(定义一个监视器类),在actionPerformed(ActionEvent e)这个方法里定义事件的处理方法。
以ActionListener接口为例。源代码:
ActionListener只有一个事件处理方法,当事件源对象发生动作时,都会采取这个唯一的方法处理。
2、事件监听机制的实现步骤
1)定义事件处理类(监视器类)
重写接口里的抽象方法,在重写的方法里定义事件处理的方式。
2)在Login(登录类)中实例化LoginListener(监视器类)对象:
//我这里的登录类定义了一个窗体及一些相关组件,包括textName输入框(用户名),textPwd密码输入框,及buttonLog(登录按钮)等。
3)给事件源(登录按钮buttonLog)对象添加addActionListener()监听方法。
3、事件的执行流程
事件源对象上发生动作→监听方法捕获动作→动作传递给捕获方法中参数对象→参数对象自动调用实现类(监视器类)中的方法采取相应的操作。
更多相关内容 -
JAVA监听机制实现一个小球的运动
2017-07-03 19:32:58JAVA监听机制实现一个小球的运动 -
java事件监听机制.doc
2019-06-07 15:26:18java事件监听机制 java中的事件机制的参与者有3种角色: .event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中 -
详解java的事件监听机制和观察者设计模式
2021-03-06 21:30:23java的事件监听机制可概括为3点:1,java的事件监听机制涉及到事件源,事件监听器,事件对象三个组件,监听器一般是接口,用来约定调用方式2,当事件源对象上发生操作时,它将会调用事件监听器的一个方法,并在调用该...首先说说监听器:
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执 行。
java的事件监听机制可概括为3点:
1,java的事件监听机制涉及到事件源,事件监听器,事件对象三个组件,监听器一般是接口,用来约定调用方式
2,当事件源对象上发生操作时,它将会调用事件监听器的一个方法,并在调用该方法时传递事件对象过去
3,事件监听器 实现类 通常是由开发人员编写,开发人员通过事件对象拿到事件源,从而对事件源上的操作进行处理
事件监听机制在java图形用户界面那一块用的最多,我们举个awt例子:
package cn.lmj.demo;
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Demo
{
public static void main(String[] args)
{
//事件源
Frame frame = new Frame();
frame.setSize(300,300);
frame.setVisible(true);
//绑定事件对象
frame.addWindowListener(new MyListener());
}
}
//监听器
class MyListener extends WindowAdapter
{
//当点击了关闭按钮是触发的函数,e是事件对象,通过事件对象可以获得事件源
@Override
public void windowClosing(WindowEvent e)
{
Frame f = (Frame) e.getSource();
f.dispose();
}
}
到这里,大家应该对事件监听机制有所理解。接下来我们就进入观察者模式,大家只要明白了事件监听机制,那么观察者模式就明白了,我们可以这样去理解观察者模式:
观察者模式:观察者(Observer)相当于事件监器,被观察者(Observable)相当于事件源和事件,执行事件源逻辑时通知observer触发oberver的方法调用,同时可传被观察者
举个简单示例
package cn.lmj.observer;
public class Demo
{
public static void main(String[] args)
{
Person p = new Person();
p.registerListener(new PersonListener()
{
@Override
public void doRun(Even e)
{
System.out.println(e.getP() + " is running");
}
@Override
public void doEat(Even e)
{
System.out.println(e.getP() + " is eatting");
}
});
p.run();
p.eat();
}
}
// 事件源
class Person
{
private PersonListener listener;
public void run()
{
if (listener != null)
{
listener.doRun(new Even(this));
}
System.out.println("run........");
}
public void eat()
{
if (listener != null)
{
listener.doEat(new Even(this));
}
System.out.println("eat........");
}
// 注册监听器
public void registerListener(PersonListener listener)
{
this.listener = listener;
}
}
// 监听器
interface PersonListener
{
public void doRun(Even e);
public void doEat(Even e);
}
// 事件对象
class Even
{
private Person p;
public Even()
{
super();
}
public Even(Person p)
{
super();
this.p = p;
}
public Person getP()
{
return p;
}
public void setP(Person p)
{
this.p = p;
}
}
到这里相信大家对Java的事件监听机制和观察者模式都很明白了,最后说一下事件监听机制或者观察者模式在javaee开发中的应用。这种设计模式体现在servlet的事件监听器,
在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象,Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型
1,监听三个域对象创建和销毁的事件监听器
2,监听域对象中属性的增加和删除的事件监听器
3,监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。(查看API文档)
最后写一个servlet的监听器监听当前网站的在线用户量,这个值不是很准确
package cn.lmj.web.listener.exapmle;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CountNumListener implements HttpSessionListener
{
//当session创建时调用该方法
public void sessionCreated(HttpSessionEvent se)
//将在线用户数量的值保持到ServletContext中,已便所有用户看到
ServletContext context = se.getSession().getServletContext();
//第一次获取没有
if(count==null)
{
count = 1;
context.setAttribute("count", count);
}
else
{
count++;
context.setAttribute("count", count);
}
}
//session销毁的时候调用该方法,把存在ServletContext中的数量值减一
public void sessionDestroyed(HttpSessionEvent se)
{
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
count--;
context.setAttribute("count", count);
}
}
-
java监听器的实现和原理详解
2020-08-25 18:39:44主要给大家介绍了关于java监听器实现和原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 -
详谈Java中的事件监听机制
2020-08-30 04:14:29下面小编就为大家带来一篇详谈Java中的事件监听机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
自己编写一个Java监听器
2020-12-22 17:44:362.1Java的时间监听机制涉及到三个组件:事件源、事件监听器、事件对象 2.2当事件源上发生操作时,它会调用事件监听器的一个方法,并且调用这个方法时,会传递事件对象过来 2.3事件监听器是由开 -
便于理解java监听机制的简单案例
2018-12-22 11:17:57如图,java监听机制至少需要这三点:事件源、事件、事件监听者。 1.事件源:引起事件发生的对象。 2.事件(对象):比如你点击黑色按钮就是一个事件,在java中事件是被当做一个事件对象对待的。 3.事件监听者:当...效果图如下:
鼠标点击黑色,中间变成黑色,点击红色,中间变成红色。
如图,java监听机制至少需要这三点:事件源、事件、事件监听者。
1.事件源:引起事件发生的对象。
2.事件(对象):比如你点击黑色按钮就是一个事件,在java中事件是被当做一个事件对象对待的。
3.事件监听者:当你点击鼠标时,计算机怎么知道你是否点击了呢?这时候事件监听者就出场了,他就是监视你是否点击了鼠标的监听者。事件监听者是类的对象,可以是发生这个事件的本身类的对象,也可以是其他类的对象。
他们之间的关系可以抽象为
具体操作时,就像我下面的代码一样,当你定义完黑红按钮组件后,这两个组件是引起事件发生的组件,他们是事件源。那么我们就要找人(事件监听者)监听他们,也就是注册监听。这里要注意:
jb1.addActionListener(this); jb2.addActionListener(this);
这里面的this指的是对象,而不是类名,如果要用其他类的话,先定义该类的对象,再让他作为监听者。就像下面的用cat而不是Cat作为监听者。
注册监听完了之后我们要指定action命令,这个是干啥的呢?我来解释一下。当你为黑红按钮组件添加监听者之后,监听者并不能直接知道你是否点击了鼠标,他要根据action命令的返回值判断是否点击了鼠标,也就是说action命令是个中介,如果你点击了jb1(黑色按钮)的话,他会返回“黑”这个字符串,当然返回值你可以自己随便写。而事件监听者通过e.getActionCommand().equals("黑") 来判断用户点击了黑色按钮。
下面的案例还有个小功能,就是猫猫类,他可以让你更加清楚监听机制。我的猫猫在jb1上加了注册监听,而没有在jb2上加,点击的时候,运行结果如下:
说明注册监听,action命令缺一不可。
至此,监听机制讲的差不多了
完整代码如下:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Test extends JFrame implements ActionListener { //定义JPanel JPanel jp = null; JButton jb1 = null; JButton jb2 = null; public static void main(String[] args){ Test test = new Test(); } //析构函数 public Test(){ jp = new JPanel(); jb1 = new JButton("黑色"); jb2 = new JButton("红色"); //注册监听 jb1.addActionListener(this); jb2.addActionListener(this); Cat cat = new Cat(); jb1.addActionListener(cat); //指定action命令 jb1.setActionCommand("黑"); jb2.setActionCommand("红"); this.add(jb1,BorderLayout.NORTH); jp.setBackground(Color.blue); this.add(jp); this.add(jb2,BorderLayout.SOUTH); this.setSize(300,250); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("黑")){ System.out.println("你按了黑色按钮!"); jp.setBackground(Color.black); }else if(e.getActionCommand().equals("红")){ System.out.println("你按了红色按钮!"); jp.setBackground(Color.red); } } } class Cat implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("黑")){ System.out.println("猫猫也知道你按了黑色按钮!"); }else if(e.getActionCommand().equals("红")){ System.out.println("猫猫也知道你按了红色按钮!"); } } }
-
java 监听机制
2013-12-05 12:09:16/** * 作者:@author ZhangShaoWen ... * 功能:监听机制 */ package com.test; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo1_2 extends JFrame implements Acti/** * 作者:@author ZhangShaoWen * 日期:2013-12-05 * 功能:监听机制 */ package com.test; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo1_2 extends JFrame implements ActionListener{ //定义变量 JPanel jp = null; JButton jb1,jb2; public static void main(String[] args) { // TODO Auto-generated method stub new Demo1_2(); } //构造函数 public Demo1_2(){ //初始化变量 jp = new JPanel(); //设置面板的背景色 jp.setBackground(Color.black); jb1 = new JButton("蓝色"); jb1.setActionCommand("a"); jb1.addActionListener(this);//注册监听 jb1.addActionListener(new Dog());//注册监听(用令外对象监听) jb2 = new JButton("红色"); jb2.setActionCommand("b"); jb2.addActionListener(this);//注册监听 jb2.addActionListener(new Dog());//注册监听(用令外对象监听) this.add(jb1,BorderLayout.NORTH); this.add(jp); this.add(jb2,BorderLayout.SOUTH); this.setSize(200,150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } //事件处理方法 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() == jb1){ //当点击蓝色按钮时 jp.setBackground(Color.blue); }else if(e.getSource()==jb2){ //当点击红色按钮时 jp.setBackground(Color.red); } } } class Dog implements ActionListener{ //事件处理方法 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand().equals("a")){ System.out.println("点击了蓝色按钮!"); }else if(e.getActionCommand().equals("b")){ System.out.println("点击了红色按钮!"); } } }
-
java监听机制的原理-回调机制
2016-07-28 12:18:02在java me中,可以对一个Button添加一个鼠标点击事件,可以对一个文本框添加一个文本变化事件等等;在Android开发中,也有大量这种基于事件的处理。 探究其基本原理,则是对方法的回调。具体的看下面简单的代码即可... -
Java中事件监听机制
2020-10-19 22:41:18Java中事件监听机制 一、事件监听机制的定义 要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如,在输入框中输入数据... -
Java实现心跳机制的方法
2020-08-18 21:30:13主要介绍了Java实现心跳机制的方法,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下 -
事件监听机制(一)Java事件监听
2019-02-25 09:56:27事件监听机制(一)Java事件监听 事件监听实现流程 事件对象: 继承自java.util.EventObject对象,由开发者自行定义实现。 事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型。 ... -
java 监听机制模拟(JButton按钮监听机制)
2014-11-03 22:34:53事件监听器就我个人的理解就是:被外部事件(键盘、鼠标)引发的程序,这段程序是被嵌入到事件源的类里面,它负责监听事件列表。而很多人把事件监听器理解成是实现EventListener接口的类。 而我的理解是实现Event... -
java 什么是事件监听机制
2021-02-27 19:00:30java 什么是事件监听机制1.java的事件监听机制包含三个组件:事件源、事件监听器、事件对象。2.当事件源上发生操作时,它将会调用事件监听器的一个方法,并且会传递一个事件对象过来。3.事件监听器由开发人员编写,... -
java中监听机制,以及观察者设计模式
2015-03-18 01:03:12详细讲解了java中的监听机制以及观察者设计模式 -
Java 中的事件监听机制
2021-03-14 03:49:04看项目代码时遇到了好多事件监听机制相关的代码。现学习一下:java事件机制包含三个部分:事件、事件监听器、事件源。1.事件:继承自java.util.EventObject类,开发人员自己定义。package ... -
JAVA监听器响应机制模拟
2011-11-15 11:49:08最近一直在搞低耦合的代码设计,后来发现JAVA中的监听器效果很不错,就特地研究了一下监听流程,后来经过调试终于成功,供大家分享下: 响应代码: /** * 事件响应运行 * @author wangchen * */ class EventRun {... -
Java中Swing的事件监听机制
2021-02-27 12:29:44刚入门java不久,总结下自己在事件监听机制中的学习心得。以前总觉得java中关于Swing组件的事件监听很难理解,通过做一些小项目,加深了一些理解,看来代码只有写出来才是自己的(之前看视频时,总觉得自己理解了,当... -
Java监听器的原理和组成及实现
2021-03-04 03:48:23例如:创建一个“人”类Class Person人拥有吃的方法public void eat(){},我们的目的就是,在这个人吃之前要提醒他洗手,所以我们就要监听这个人,不管他在什么时候吃,我们都要能够监听到并且提醒他洗手,通俗点讲这... -
java事件监听机制
2016-07-29 21:48:41java事件监听机制 为何按钮无法登录? 在刚刚开始学习java的图形化界面编程的时,我们模仿qq制作一个简单的qq登录界面的时候。我们点击登录那个按钮,会发现并没有任何反应,而当我们使用qq的时候我们点击登录... -
Java监听器的四种实现方法
2020-10-21 11:04:04监听器的三种实现方法(OnlickListener) android监听有4种实现方法,匿名内部类实现,内部类实现,实现事件接口,覆写方法实现,控件onClick属性实现事件,下面我将一一举例。 欢迎使用Markdown编辑器 你好! 这是你... -
java 事件监听 - 鼠标
2021-02-28 10:09:23java 事件监听 - 鼠标//事件监听//鼠标事件监听//鼠标事件监听有两个实现接口//1、MouseListener 普通的鼠标操作//2、MouseMotionListener 鼠标的拖拽、移动import java.awt.*;import javax.swing.*;import java.awt... -
java 事件机制原理 自定义事件发布与监听
2020-07-19 21:47:27通过自定义事件机制去理解 java和spring中的事件机制原理 ① 自定义事件机制整体框架如下,base包中为事件核心类,event包为测试用的事件 demo包为测试类 ② 首先我们定义一个通用事件源,记录事件信息,里面... -
Java监听链上智能合约事件
2021-07-13 15:19:04监听机制是建立在日志基础之上,如果智能合约触发了一个事件,那么该事件将写入以太坊日志;如果外部应用订阅了这个事件,那么应用就可以在日志中出现该事件后及时监测到,进而获取日志信息。 2、观察者模式和发布... -
JAVA的Swing事件监听机制
2019-04-15 21:16:58文章目录Swing事件模型 Swing事件模型 Swing 事件模型又三个部分组成:事件源,事件和监听程序。 事件源即触发事件的操作,如键盘输入,鼠标点击,点击按钮等。事件源 ... -
自定义Java监听器
2019-04-28 12:04:31当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我们的目的就是,在这个人吃之前要提醒他洗手,所以我们就要监听这个... -
Java接口和事件监听机制
2018-10-17 01:18:30使用Java能够实现一个图形用户界面之后,自然而然地会考虑一个问题就是:我们可以在...想要实现这样一个登录页面的基本功能,需要了解一下Java的事件监听机制,在这之前先看一下接口是一个什么东西。 一、接口 ...