GUI-图形界面编程-4

事件监听体系

事件体系和分类
前面已经分析了,在事件里面,涉及3个知识:
事件源:发生事件的组件;
事件: 具体发生什么事情;
事件监听器:负责监听事件源发出的事件,类似一套神经系统,能够自动感知事件的发生,作出相应的反应。

需要在一个事件源上面添加一个,或者注册一个事件监听器
那么这个事件源上面发生了一些事件的操作,这个事件源
所关系的事件监听器,就会自动感知发生的事件,然后去调用它自己里面的具体某个方法。执行具体的操作;

比如图形界面编程中,点击事件;监听器所做的操作是根据用户的需求来决定,
通过覆写监听器里面的方法,最后实现用户的功能.

事件分类–鼠标事件
设计鼠标事件场景
如果使用MouseListener 事件监听 ,需要准备一场景,然后给组件添加MouseListener 监听;
实现下面图示效果:在Frame窗体上自定义了一个组件Button,当我的鼠标移上去,Button就发生移动。分析:
在这里插入图片描述在这里插入图片描述
添加鼠标事件监听器
添加鼠标事件,使用 b1.addActionListener行不行?

1.从继承体系结构上观察 actionListener和mouseListener并没有继承关系;
2.从命名上观察 actionEvent 需要 addActionLisenter ,而mouseEvent,需要MouseListener;

鼠标事件实现类
写个类,实现MouseListener, 在添加未实现方法,如下图
在这里插入图片描述
鼠标事件方法
在这里插入图片描述
MouseListener是接受组件上“感兴趣的”事件,如果不感兴趣,
不接收。比如说 按下,释放,单击,进入或离开,按下 就是 鼠标按下,释放 就是鼠标松开,单击 按下并释放,进入,鼠标移进去;
在这里插入图片描述
功能:
1.实现鼠标移动到按钮上面去,程序后台打印一句话 ”正在打开” ?
2.实现鼠标移动到按钮上面去,按钮就移动位置?

功能实现
对于MouseListener监听器,能够自动知道被添加到那个组件上面,比如,请的保安一样,他能够自动知道服务于那家公司, 所以可以通过MouseEvent对象里面获得事件源(发生事件的组件);

怎么获取事件源
获得事件源方式:
MouseEvent事件的对象中已经包装好一个鼠标事件,可以直接通过e.getSource方法获取对应事件源信息;
getSource()返回值为什么是Object?
理论上应该返回button,实际上返回Object,因为除了给Button添加鼠标事件监听以外,还可以给TextField添加事件监听。所以它无法确定返回值具体是哪个事件源,所以通通返回Object对象。

强制转换Object
获取Object对象之后需要强制转换Button对象
Object obj = e.getSource();
If(obj instanceof Button){
Button b =(Button) obj;
}

移动按钮坐标
怎么获取当前坐标?
b.getX(),b.getY();
设置按钮的坐标和位置:
b.setBounds(b.getX()+100,b.getY()+10,10,10)

鼠标离开关闭窗体
System.exit(0) // 在System类有exit这个方法,用来表示退出JVM,
方法参数0表是正常退出,非零表示异常退出;

鼠标事件(单双击实现)
MouseEvent对象
API中并没有单击双击事件方法,对于这样的单击双击操作,其实都封装成到 MouseEvent对象里面. 封装成一个事件对象,而点击的次数,点的坐标,这些统统包装到MouseEvent对象里面。
打印一下MouseEvent对象, 试一试?
单击双击实现
在这里插入图片描述
在这里插入图片描述

事件分类-键盘事件
键盘事件环境搭建
添加键盘事件,需要键盘输入某个值,所以需要一个TextField 或者TextArea用来输入某个值。
在这里插入图片描述
添加键盘事件监听器
给文本组件(TextField)添加键盘事件监听器
tf.addKeyListener
在这里插入图片描述
添加实现类
在这里插入图片描述
事件方法
在KeyEvent里面 ,有没有哪个方法是获得具体按下哪个键?
getKeyChar()
返回与此事件关联的字符
getKeyCode()
返回与此事件关联的整数KeyCode
getkeyText()
它的一个描述,比如 HOME键 ,F1 ,A

实现”按W向前走两步”功能
功能: 实现键盘按W键之后,程序打印 ”向前走两步功能”;
在这里插入图片描述
事件分类-窗体事件
在这里插入图片描述
windowListener事件监听
怎样关闭窗体?
在这里插入图片描述
应该给哪个组件添加windowListener 窗体监听器? – Frame

添加实现类
public class MyWindowListener implements WindowListener

事件监听方法
在这里插入图片描述
Windowclosed 当窗口关闭之后,触发该事件;
Windowclosing 用户试图从窗口的系统菜单中关闭窗口时调用;

实现窗体Frame的关闭

public void windowClosing(WindowEvent e) {
	// TODO Auto-generated method stub
	System.exit(0);
}

实现窗体的隐藏和显示

public void windowClosing(WindowEvent e) {
	Frame f = (Frame) e.getSource();
	f.setVisible(false);
	try {
		Thread.sleep(3000);
	} catch (InterruptedException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
	f.setVisible(true);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值