【Java】-基础-事件监听

在Swing事件模型中由三个分离的对象完成对事件的处理,分别为事件源、事件以及监听程序。事件源触发一个事件,它被一个或多个“监听器”接收,监听器负责处理事件,监听器也就是事件处理对象。

所谓事件监听器,实质上就是一个“实现特定类型监听器接口”的类对象。具体地说,事件几乎都以对象来表示,它是某种事件类的对象,事件源(如按钮)会在用户作出相应的动作(如按钮被按下)时产生事件对象,如动作事件对应ActionEvent类对象,同时需要编写一个监听器的类必须实现相应的接口,如ActionEvent类对应的是ActionListener接口,需要获取某个事件对象就必须实现相应的接口,同时需要将接口中的方法一一实现。最后事件源(按钮)调用相应的方法加载这个'实现特定类型监听器接口"的类对象,这样就可以为组件添加或移除相应的事件监听器。

下面,我们介绍一个具体事例,这个实例是这样的,当我们按下“黑色”按钮时,窗体背景显示的是黑色;当我们按下“红色”按钮时,窗体背景显示的是红色。如图所示:


在这个实例中,两个按钮是事件源,我们要将这个事件类实现相应的接口ActionListener,我们把接口的处理方法根据需要重写,即按下黑色按钮显示黑色,按下红色按钮显示红色。并在两个按钮上注册监听。代码如下:

/*
 *功能:讲解事件处理机制 
 *第34讲
 *按下按钮改变颜色
 * */
package com.test3;
import java.awt.*;
import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Demo9_3 extends JFrame implements ActionListener{

	//定义一个Panel
	JPanel mp=null;
	//定义两个按钮
	JButton jb1=null;
	JButton jb2=null;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo9_3 demo9_3=new Demo9_3();
	}
	public Demo9_3()
	{
		mp=new JPanel();
		jb1=new JButton("黑色");//按钮显示的内容为“黑色”
		jb2=new JButton("红色");//按钮显示的内容为“红色”
		
		this.add(jb1,BorderLayout.NORTH);//设定jb1在窗体的顶端
		mp.setBackground(Color.BLACK);//把面板mp的背景设置为黑色
		this.add(mp);//把mp加入到JFrame中
		this.add(jb2,BorderLayout.SOUTH);//把jb2放置在窗体的底端
		
		Cat myCat1=new Cat();
		
		//注册监听
		jb1.addActionListener(this);
		//从jb1.addActionListener(myCat1),就可以推出
		//事件源对象是jb1,事件监听对象就是myCat1
		jb1.addActionListener(myCat1);
		//指定action命令
		jb1.setActionCommand("aa");
		//注册监听
		jb2.addActionListener(this);
		jb2.addActionListener(myCat1);
		//指定action命令
		jb2.setActionCommand("bb");
		this.setSize(200, 150);//设置窗体大小
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
				
	}
	
	//对事件处理的方法
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		//判断是哪个按钮被点击
		if(e.getActionCommand().equals("aa"))
		{
			System.out.println("你点击黑色按钮");
			mp.setBackground(Color.black);
		}else if(e.getActionCommand().equals("bb"))
		{
			System.out.println("你点击红色按钮");
			mp.setBackground(Color.red);//把面板mp的背景换成红色
		}else
		{
			System.out.println("不知道");
		}
	}
	
}

//任何一个类,只要他实现了 相应的接口,就可以去监听事件源
class Cat implements ActionListener
{

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("aa"))
		{
			System.out.println("猫猫也知道你按下黑色按钮");
		}
		else if(e.getActionCommand().equals("bb"))
		{
			System.out.println("猫猫也知道你按下红色按钮");
		}
		
	}
	
}

/*
 * 1.一个类要实现监听的步奏
 * a.实现相应的接口[KeyListener,MouseListener,ActionListener,WindowListener]
 * b.把接口的处理方法根据需要重新编写(Override)
 * c.在事件源上注册监听
 * d.事件传递是靠事件对象的
 */



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值