当前位置:首页 » 编程语言 » java中的监听

java中的监听

发布时间: 2023-03-07 02:04:54

java中的事件监听是怎么回事

不是通过线程实现的,它是通过一种注册--通知机制实现的。在java的设计模式中,有一种模式叫:观察者模式,和这个类似。举个例子,本例子是一个简单的监听当数据发生变化时要做的操作。 1,我们先定义一个接口,可以让多个监听者实现 public interface IDataListen {public void update(Object event,Object msg);}2,实现一监听者 public class DataListen implements IDataListen{ @Override public void update(Object event, Object arg) { // TODO Auto-generated method stub System.out.println("数据发生了变化"); }}3,被监听者 public class DataManager{ private List<IDataListen> listenList = new ArrayList<>(); public void notifyListen(Object event,Object msg){ for(IDataListen dataListen : listenList){ dataListen.update(null, null); } } public void addListen(IDataListen dataListen){ listenList.add(dataListen); } public void updateData(Object msg){ this.notifyListen(null, msg); } public static void main(String[] args) { DataManager dataManager = new DataManager(); IDataListen dataListen1 = new DataListen(); ...

Ⅱ 如何实现java在后台监听键盘

操作系统,有两个层次,第一个层次是对组装起电脑的各个硬件的驱动程序;第二个是建立在驱动程序上的各项应用程序,比如桌面显示、键盘监听后的处理程序等等。如果想要进行监听键盘,那么就需要获取到所使用操作系统给出的api接口,以windows系统为例,是用c和c++进行编写的,所以他们提供的api都是c和c++的api接口。于是用java的话就需要用到java的native方法,一个Native Method就是一个java调用非java代码的接口。所以3个步骤:
1、引用java native方法。
2、研究windows api。
3、调用windows api中的键盘监听接口,完成程序。

Ⅲ 在程序中(java,C#)监听器是啥玩意

监听器即listen,指的是被动监听,举例来说我有一个温度计,它一直监听着温度,如果温度发生了变化水银柱的高度就发生变化,这里温度计是一个监听器,温度变化是一个事件,当这个时间出发了监听器时,则得到水银柱高度变化这么个结果,你懂了么?

Ⅳ java监听器原理

  • Java最新的事件处理方法是基于授权事件模型,事件源生成事件并将其发送至一个或多个监听器,监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。


  • 事件:在授权事件模型中,事件是一个描述事件源状态改变的对象。 通过鼠标、键盘与GUI界面直接或间接交互都会生成事件。如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。


  • 事件源:事件源是一个生成事件的对象

  1. 一个事件源可能会生成不同类型的事件,事件源提供了一组方法,用于为事件注册一个或多个监听器。

  2. 每种事件的类型都有其自己的注册方法。一般形式为:publicvoidadd<EventType>Listener(TypeListenere)

  3. AWT采取的事件控制过程:监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”

  4. 事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。

  5. 事件源将在发生事件时向所有注册的监听器发送事件对象。

  6. 监听器对象使用事件对象中的信息来确定它们对事件的响应


  • 事件模型:

  1. 基于代理(授权)事件模型,事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的add<EventType>Listener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。


  • 此模型主要由以三种对象为中心组成

  1. 事件源由它来激发产生事件

  2. 是产生或抛出事件的对象。

  3. 事件监听器由它来处理事件

  4. 实现某个特定EventListener接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型。

  5. 事件具体的事件类型

  6. 事件类型封装在以java.util.EventObject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象

Ⅳ java中如何实现多按键同时按下的键盘监听事件

1,为相应的控件设置KeyListener()的监听
2,实现接口中的方法
3,主要重写keyPressed()这个方法
4,书写逻辑
5,见代码
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_1&&e.getKeyCode()==KeyEvent.VK_2){
System.out.println("1,2键被点击了。。。");
}
}ps,还可以自己写一个数组记录每个按键的状态,根据状态值进行逻辑处理。

Ⅵ java设计模式-回调、事件监听器、观察者模式

转自( https://my.oschina.net/u/923324/blog/792857 )

背景
关于设计模式,之前笔者写过工厂模式,最近在使用gava ListenableFuture时发现事件监听模型特别有意思,于是就把事件监听、观察者之间比较了一番,发现这是一个非常重要的设计模式,在很多框架里扮演关键的作用。

回调函数
为什么首先会讲回调函数呢?因为这个是理解监听器、观察者模式的关键。

什么是回调函数
所谓的回调,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。 有这么一句通俗的定义:就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。

举个例子:
这里有两个实体:回调抽象接口、回调者(即程序a)

回调接口(ICallBack )
public interface ICallBack {
public void callBack();
}
回调者(用于调用回调函数的类)
public class Caller {

}
回调测试:
public static void main(String[] args) {
Caller call = new Caller();
call.call(new ICallBack(){

控制台输出:

start...

终于回调成功了!

end...

还有一种写法

或实现这个ICallBack接口类

class CallBackC implements ICallBack{
@Override
public void callBack() {
System.out.println("终于回调成功了!");
}
}
有没有发现这个模型和执行一个线程,Thread很像。 没错,Thread就是回调者,Runnable就是一个回调接口。

new Thread(new Runnable(){
@Override
public void run() {
System.out.println("回调一个新线程!");
}}).start();
Callable也是一个回调接口,原来一直在用。 接下来我们开始讲事件监听器

事件监听模式
什么是事件监听器
监听器将监听自己感兴趣的事件一旦该事件被触发或改变,立即得到通知,做出响应。例如:android程序中的Button事件。

java的事件监听机制可概括为3点:

java的事件监听机制涉及到 事件源,事件监听器,事件对象 三个组件,监听器一般是接口,用来约定调用方式
当事件源对象上发生操作时,它将会调用事件监听器的一个方法,并在调用该方法时传递事件对象过去
事件监听器实现类,通常是由开发人员编写,开发人员通过事件对象拿到事件源,从而对事件源上的操作进行处理
举个例子
这里我为了方便,直接使用jdk,EventListener 监听器,感兴趣的可以去研究下源码,非常简单。

监听器接口
public interface EventListener extends java.util.EventListener {
//事件处理
public void handleEvent(EventObject event);
}

事件对象
public class EventObject extends java.util.EventObject{
private static final long serialVersionUID = 1L;
public EventObject(Object source){
super(source);
}
public void doEvent(){
System.out.println("通知一个事件源 source :"+ this.getSource());
}

}
事件源
事件源是事件对象的入口,包含监听器的注册、撤销、通知

public class EventSource {
//监听器列表,监听器的注册则加入此列表
private Vector<EventListener> ListenerList = new Vector<EventListener>();
//注册监听器
public void addListener(EventListener eventListener){
ListenerList.add(eventListener);
}
//撤销注册
public void removeListener(EventListener eventListener){
ListenerList.remove(eventListener);
}
//接受外部事件
public void notifyListenerEvents(EventObject event){
for(EventListener eventListener:ListenerList){
eventListener.handleEvent(event);
}
}

}

测试执行
public static void main(String[] args) {
EventSource eventSource = new EventSource();

}
控制台显示:

通知一个事件源 source :openWindows

通知一个事件源 source :openWindows

doOpen something...

到这里你应该非常清楚的了解,什么是事件监听器模式了吧。 那么哪里是回调接口,哪里是回调者,对!EventListener是一个回调接口类,handleEvent是一个回调函数接口,通过回调模型,EventSource 事件源便可回调具体监听器动作。

有了了解后,这里还可以做一些变动。 对特定的事件提供特定的关注方法和事件触发

public class EventSource {
...
public void onCloseWindows(EventListener eventListener){
System.out.println("关注关闭窗口事件");
ListenerList.add(eventListener);
}

}
public static void main(String[] args) {
EventSource windows = new EventSource();
/**
* 另一种实现方式
*/
//关注关闭事件,实现回调接口
windows.onCloseWindows(new EventListener(){

}
这种就类似于,我们的窗口程序,Button监听器了。我们还可以为单击、双击事件定制监听器。

观察者模式
什么是观察者模式
观察者模式其实原理和监听器是一样的,使用的关键在搞清楚什么是观察者、什么是被观察者。

观察者(Observer)相当于事件监器。有个微博模型比较好理解,A用户关注B用户,则A是B的观察者,B是一个被观察者,一旦B发表任何言论,A便可以获得。
被观察者(Observable)相当于事件源和事件,执行事件源通知逻辑时,将会回调observer的回调方法update。
举个例子
为了方便,同样我直接使用jdk自带的Observer。

一个观察者
public class WatcherDemo implements Observer {
@Override
public void update(Observable o, Object arg) {
if(arg.toString().equals("openWindows")){
System.out.println("已经打开窗口");
}
}
}
被观察者
Observable 是jdk自带的被观察者,具体可以自行看源码和之前的监听器事件源类似。

主要方法有

addObserver() 添加观察者,与监听器模式类似
notifyObservers() 通知所有观察者
类Watched.java的实现描述:被观察者,相当于事件监听的事件源和事件对象。又理解为订阅的对象 主要职责:注册/撤销观察者(监听器),接收主题对象(事件对象)传递给观察者(监听器),具体由感兴趣的观察者(监听器)执行

/**

}
测试执行
public static void main(String[] args) {
Watched watched = new Watched();
WatcherDemo watcherDemo = new WatcherDemo();
watched.addObserver(watcherDemo);
watched.addObserver(new Observer(){
@Override
public void update(Observable o, Object arg) {
if(arg.toString().equals("closeWindows")){
System.out.println("已经关闭窗口");
}
}
});
//触发打开窗口事件,通知观察者
watched.notifyObservers("openWindows");
//触发关闭窗口事件,通知观察者
watched.notifyObservers("closeWindows");

控制台输出:

已经打开窗口

已经关闭窗口

总结
从整个实现和调用过程来看,观察者和监听器模式基本一样。

有兴趣的你可以基于这个模型,实现一个简单微博加关注和取消的功能。 说到底,就是事件驱动模型,将调用者和被调用者通过一个链表、回调函数来解耦掉,相互独立。

“你别来找我,有了我会找你”。

整个设计模式的初衷也就是要做到低耦合,低依赖。

再延伸下,消息中间件是什么一个模型? 将生产者+服务中心(事件源)和消费者(监听器)通过消息队列解耦掉. 消息这相当于具体的事件对象,只是存储在一个队列里(有消峰填谷的作用),服务中心回调消费者接口通过拉或取的模型响应。 想必基于这个模型,实现一个简单的消息中间件也是可以的。

还比如gava ListenableFuture,采用监听器模式就解决了future.get()一直阻塞等待返回结果的问题。

有兴趣的同学,可以再思考下观察者和责任链之间的关系, 我是这样看的。

同样会存在一个链表,被观察者会通知所有观察者,观察者自行处理,观察者之间互不影响。 而责任链,讲究的是击鼓传花,也就是每一个节点只需记录继任节点,由当前节点决定是否往下传。 常用于工作流,过滤器web filter。

Ⅶ javaEE中的监听器有什么作用

一、概念
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
二、Servle监听器
1、编写 Servlet 监听器
(1)和编写其它事件监听器一样,编写servlet监听器也需要实现一个特定的接口,并针对相应动作覆盖接口中的相应方法。
(2)和其它事件监听器略有不同的是,servlet监听器的注册不是直接注册在事件源上,而是由WEB容器负责注册,开发人员只需在web.xml文件中使用<listener>标签配置好监听器,web容器就会自动把监听器注册到事件源中。
(3)一个 web.xml 文件中可以配置多个 Servlet 事件监听器,web 服务器按照它们在web.xml 文件中的注册顺序来加载和注册这些 Serlvet 事件监听器。
配置如下:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

三、就是gui里边控件的监听器了。具体是什么就要自己看看相关书籍或者源码了!

Ⅷ java中为什么要设置监听器,有什么用

猪哥解答:
1、private JButton jb=new JButton("按钮");这句话声明了一个按钮,名字叫jb。
2、jb.addActionListener(this);这里给jb那个按钮设置了监听,默认为点击触发,当然你写的这个监听有点怪异~
3、点击按钮jb触发监听处理方法actionPerformed,在这里可以做你想要的操作,你代码实现的是改变lab这个label标签的内容。
4、至于java中为什么要用监听,这就像银行装监控一样,监视你的一举一动,银行装监控是为了捕捉每个进银行的人的动作,预防危险的发生。
java中做监听同样是为了监视某个客户端动作用的,万一你给我搞破坏怎么办(监听的作用远不止如此),当然也像平时生活中不是所有的地方都要放监控,要不就没法过了,java中也不是所有的地方都要放监听,具体哪里要放监听,不该是在课本里学的,应该根据实际工厂、公司的需求来定。

热点内容
编译路由器固件选择 发布:2024-05-19 03:56:28 浏览:39
手机f加密 发布:2024-05-19 03:28:47 浏览:225
用什么密码写日记 发布:2024-05-19 03:27:57 浏览:303
数据库access2003 发布:2024-05-19 02:49:39 浏览:620
碧蓝航线pc挂机脚本 发布:2024-05-19 02:30:03 浏览:589
脚本fir 发布:2024-05-19 02:28:57 浏览:261
阿里云独享服务器 发布:2024-05-19 02:23:54 浏览:253
织梦源码ga 发布:2024-05-19 02:23:20 浏览:571
java文件名后缀 发布:2024-05-19 02:14:39 浏览:956
快手点榜脚本 发布:2024-05-19 02:08:44 浏览:163