java 监听机制模拟(JButton按钮监听机制)

一、概念

1.事件监听器

事件监听器就我个人的理解就是:被外部事件(键盘、鼠标)引发的程序,这段程序是被嵌入到事件源的类里面,它负责监听事件列表。而很多人把事件监听器理解成是实现EventListener接口的类。

而我的理解是实现EventListener接口的类是事件处理器。里边有处理事件的方法。从逻辑上看是这样的,但是人家既然这样来命名了,那也没有办法。因为程序员只要知道这么去添加监听器就行了,不必理解内部的处理流程,但是作为一个热爱计算机的程序员来说,必须要理解其过程。

事件监听器的功能:

       负责监听事件注册类表,有相关事件注册就立马 new 一个事件,然后调用事件处理器里的事件处理方法,完成事件处理。然后移除事件注册列表的相关事件。

2.事件源:

事件源是事件的起源,可以称作事件触发源。其主要的功能是,介绍外边事件,比如键盘、鼠标等,当有事件时就会触发事件监听器。

主成分:主要由事件监听器、注册事件方法(如:addActionListener)构成。

3.事件对象:

实现EventObject接口的类。里面封装了对事件源进行操作的方法。比如:getActionCommand()方法。

4.事件处理器

       事件处理器是对事件进行处理的类,这类实现EventListener接口。此类由程序员编写。比如 事件处理器中的处理程序:


二、模拟程序

以JButton按钮为列,看一下程序:

import java.util.EventListener;
import java.util.EventObject;
import java.util.Vector;

//自定义一个按钮事件
class ActionEvent extends EventObject{
	
	String actionCommand;
	public ActionEvent(Object source,String command)
	{
		super(source);
		this.actionCommand = command;
		System.out.println("按钮点击事件产生!");
	}
	
    public String getActionCommand() {
	    return actionCommand;
	}
}

// 弄一个在按钮里面使用的接口,通过继承此接口可以完成事件处理的类
interface ActionListener extends EventListener{
	//这里是当事件发生后的响应过程
	public void actionPerformed(ActionEvent me);
}

//再自定义一个监听器
class MyListener implements ActionListener
{
	//这里是当事件发生后的响应过程
	public void actionPerformed(ActionEvent me)
	{
		String str=me.getActionCommand();
		if(str.equals("hello"))
		System.out.println("按钮点击事件被处理");
		
	}
}

//以下这个类为触发事件的事件源
class JButton {  //比如button按钮

	String s;
	
	JButton(String s)
	{
		this.s=s;
	}
	String getAt()
	{
		return s;
	}
	private Vector vectorListeners=new Vector();  //定义一个向量

	public synchronized void addActionListener(ActionListener actionlistener) //注册监听器
	{
		vectorListeners.addElement(actionlistener);   // 将指定元素添加到此向量的末尾
		System.out.println("按钮上注册监听器");
	}

	public synchronized void removeActionListener(ActionListener actionlistener) //移除监听器
	{
		vectorListeners.removeElement(actionlistener); //从此向量中移除变量的第一个(索引最小的)匹配项。
		System.out.println("移除按钮上的监听器");
	}

	protected void activateMyEvent() //判断监听器是否监听到
	{
		Vector tempVector=null;
		
		synchronized(this)
		{
			ActionEvent e;
			e=new ActionEvent(this,getAt()); //产生了事件
			tempVector=(Vector)vectorListeners.clone();
			for(int i=0;i
   
   
    
    按钮
		MyListener mylistener= new MyListener(); //定义监听器

		button.addActionListener(mylistener);  //在按钮上注册监听器监听按钮点击事件
		button.Trigger(); //触发按钮事件
		
		System.out.println("程序结束");
	}
}


   
   

三、问题:

(理解以上概念及代码后,在看看以下问题)

1、以上只是模拟,那么java中是如何通过点击按钮,然后触发按钮事件的,比如点击按钮就触发以上程序所提供的Trigger() 方法的?

 

 

提示:主要说外部事件,不谈内部事件

 


 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi竹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值