大学笔记-监听事件

#监听事件
主要分为键盘,鼠标,窗口,列表等在活动时监听他们,在监听到事件对象时运行对应的代码。
一般注册监听方法如下

.addXXXListener();//XXX为具体监听样式

EventObject .getSouce();方法,返回监听对象的监听源

动作事件监听

接口 ActionListener

class text implements ActionListener{
Frame frame=new Frame("登录");
Button b_1=new Button("清空");
		//开始填写监视器
		b_1.addActionListener(this);//表示当前类作为监听器类
		frame.add(b_1,BorderLayout.CENTER);
		frame.setSize(400,600);
		frame.setVisible(true);
@Override
//重写抽象方法,参数e为事件对象,会自动传入方法
public void actionPerformed(ActionEvent e) {
	//当事件对象被检测到时,代码执行体
				
			}

}

窗口事件监听

接口 WindowListener

当想对当前窗口设置时,一般用
Window w=(Window)e.getComponent();
方法,获得窗口的对象。

.dispose();方法关闭窗口

具体监听方法

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.lang.reflect.Constructor;

import javax.swing.JOptionPane;

public class 窗口监听事件 implements WindowListener{
	/*
	 * @喵仔
	 * 窗口监听,
	 */
	public 窗口监听事件() {
		Frame frame=new Frame("窗口监听事件");
		frame.addWindowListener(this);
		
		frame.setSize(400, 600);
		frame.setVisible(true);
	}
	public static void main(String[] args) {
		new 窗口监听事件();

	}
	@Override
	public void windowOpened(WindowEvent e) {
		//首次打开窗口时
		Window w=(Window)e.getComponent();
		w.setBackground(Color.red);
	}
	@Override
	public void windowClosing(WindowEvent e) {
		// 点击关闭页面按钮时,一般用.dispose方法关闭
		Window w=(Window)e.getComponent();
		JOptionPane.showMessageDialog(null, "正在关闭窗口");
		w.dispose();
	}
	@Override
	public void windowClosed(WindowEvent e) {
		//当.dispose使用后,即成功关闭后
		JOptionPane.showMessageDialog(null, "窗口已关闭");
	}
	@Override
	public void windowIconified(WindowEvent e) {
		//当从正常大小最小化是使用
		Window w=(Window)e.getComponent();
		w.setBackground(Color.green);
	}
	@Override
	public void windowDeiconified(WindowEvent e) {
		// 从最小化变成正常化时
		
	}
	@Override
	public void windowActivated(WindowEvent e) {
		// 当window把他设置为活动窗口时使用,即窗口有变化时
		Window w=(Window)e.getComponent();
		w.setBackground(Color.blue);
	}
	@Override
	public void windowDeactivated(WindowEvent e) {
		//不再是活动状态时
		
	}

}

列表监听

一个swing里的列表组件JComboBox;
是一个下拉框,有.setMode();方法添加选择项。
例:

JComboBox jbbox=new JComboBox();
jbbox.setMode(new DefaultComboBoxModel(new String[]{xx,xx,xx,xx,xx,}));

列表监听的主要接口 ItemListener类
位于java.awt.event包里.

监听对象类 ItemEvent 类
包含的常用方法:
1,读取选中和取消选中两种状态 .getStateChange();
返回int
2,返回受事件影响的项–即被改变的选项名 .getItem();
返回Object
3,返回产生事件的ItemSelectable对象 .getItemSelectable();
返回ItemSelectable
4,返回标识此项的参数字符串 .getparamString();
返回String
重写监听事件方法

@Override
	public void itemStateChanged(ItemEvent e) {
		//以下方法属于ItemLisrener接口下
		if(e.getStateChange()==ItemEvent.SELECTED) {//返回状态变更的类型,ItemEvent.SLEECTED为选定
			JOptionPane.showMessageDialog(null, "以选定"+e.getItem()//返回受事件影响的项
			+"\n"+e.getItemSelectable()//返回产生事件的ItemSelectable对象,相当于项的大盒子。
			+"\n"+e.paramString());//返回标识受事件影响的项的参数字符串
		}
		if(e.getStateChange()==ItemEvent.DESELECTED) {//ItemEvent.DESLEECTED为取消选定
			JOptionPane.showMessageDialog(null, "以取消选定"+e.getItem()//返回受事件影响的项
			+"\n"+e.getItemSelectable()//返回产生事件的ItemSelectable对象,相当于这个项的大盒子。
			+"\n"+e.paramString());//返回标识受事件影响的项的参数字符串
			
		}
		
	}

鼠标监听

接口:MouseListener
监听鼠标的动作,可以区分鼠标的哪一个按键
方法:.getButton(); 返回int,与MouseEvent里的常量对应。
MouseEvent类的常量

MouseEvent.BUTTON1 代表左键
MouseEvent.BUTTON2 代表中建
MouseEvent.BUTTON3 代表右键

监听器方法如下

@Override
		public void mouseClicked(MouseEvent e) {//当鼠标点击时的处理
		System.out.println("点击了按键!!!");
				
		}
		 @Override
		public void mouseEntered(MouseEvent e) {//当鼠标移动到组件上的处理,还没有点击时。
			System.out.println("进入了鼠标监听!!!");
		}
		 @Override
		public void mouseExited(MouseEvent e) {//当鼠标离开组件上方时处理
			System.out.println("离开了鼠标监听!!!");
		 }
		 @Override
		 public void mousePressed(MouseEvent e){//鼠标在组件上按下时处理
			 System.out.println("按下了按键!");
		 }
		 public void mouseReleased(MouseEvent e) {//鼠标在组件上松开时处理
			 System.out.println("松开了按键");
		 }

鼠标监听执行顺序

上面代码的结果如下

进入了鼠标监听!!!
离开了鼠标监听!!!
进入了鼠标监听!!!
按下了按键!
松开了按键
点击了按键!!!

可以看出 鼠标点击的顺序从前往后依次为:
鼠标按下——鼠标松开——鼠标点击

使用匿名类写重写监听器

首先,导入java.awt.evnet.*;
然后,型如下方代码,重写监听器,重写的类相当于监听器类的子类

或者使用匿名内部类的形式,简化代码。
但是,这样定义的监听器只能使用一次。

Button b_2=new Button("登录");
//在参数内定义匿名内部类,重写抽象方法
		b_2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(choice(text_1.getText(),text_2.getText())) {
					b=true;
					JOptionPane.showMessageDialog(null, "信息正确,登录成功!");
				}else {
					b=false;
					JOptionPane.showMessageDialog(null, "信息错误,登录失败!");
				}
				
			}
		});

事件监听接口的子类:事件适配器

当我们只用一部分方法时,避免重写多余的抽象方法,造成不必要的工作量。可以使用适配器。
如:WindowListener接口的子类WindowAdapter类是窗口事件适配器
使用方法:
1,extends继承它,在重写需要的方法。

public class WindowAdapterTest extends WindowAdapter{
	@Override
	public void windowClosing(WindowEvent e) {
		
	}
}

2,写一个关于它的匿名类,重写用的的方法
例:

this.addMouseListener(new MouseAdapter() {
		public void mouseClicked(MouseEvent e) {
			
		}
	});

焦点

让窗口获得焦点

this.setFocusable(true);

重新聚集焦点
.requestFocus

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值