博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础入门 AWT事件处理
阅读量:3890 次
发布时间:2019-05-23

本文共 2963 字,大约阅读时间需要 9 分钟。

1.事件处理机制

例如上一节讲到的运行窗口无法关闭就是因为按钮的点击功能没有实现,如果想要关闭窗口就需要事件处理机制对窗口进行监听。

事件处理机制专门用于响应用户的操作,比如,客户想要点击鼠标,按下键盘等操作,就需要用到AWT事件处理机制。在学习AWT事件处理机制前需要了解几个重要的概念。

~事件对象:封装了GUI组件上发生的特定事件,

~事件源(组件):事件发生的场所,通常就是指产生时间的组件。

~监听器:负责监听事件源上发生的事件,并对各种事件作出相应处理的对象。

~事件处理器:监听器对象对接收的时间对象进行相应处理的方法。

 

 

在程序中如果想要实现事件的监听机制,首先需要定义一个类实现事件监听器的接口,例如Window类需要定义WindowListener()方法作为事件源注册事件监听器对象。

接下来代码为例:

import java.awt.*;import java.awt.event.*;public class Main{	public static void main(String[] args)throws Exception{        Frame f=new Frame("我的窗体");//设置窗体名称        f.setSize(400, 300);//设置宽和高        f.setLocation(300, 200);//设置在屏幕中所属位置        f.setVisible(true);//设置窗体可见        MyWindowListener mw=new MyWindowListener();        f.addWindowListener(mw);	}}class MyWindowListener implements WindowListener{	public void windowClosing(WindowEvent e){		Window window=e.getWindow();		window.setVisible(false);		window.dispose();	}	public void windowActivated(WindowEvent e){		}	public void windowClosed(WindowEvent e){			}	public void windowDeactivated(WindowEvent e){			}	public void windowDeiconified(WindowEvent e){			}	public void windowIconified(WindowEvent e){			}        public void windowOpened(WindowEvent e){			}}

首先创建一个实现了WindowListener接口的事件监听器类MyWindowListener,并且将窗口与监听器绑定,从而实现了窗口关闭闭的功能

2.事件适配器

在上一个程序中MyWindowListener类实现了接口中的七个方法,但实际用到的只有一个方法,这明显是一种多余而又必需的工作。针对这样的问题JDK提供了一些适配器,这些适配器实现了接口中所有的方法,但方法内并没有任何代码,想要调用哪个方法知己重写该方法即可

代码为例:

import java.awt.*;import java.awt.event.*;public class Main{	public static void main(String[] args)throws Exception{        Frame f=new Frame("我的窗体");//设置窗体名称        f.setSize(400, 300);//设置宽和高        f.setLocation(300, 200);//设置在屏幕中所属位置        f.setVisible(true);//设置窗体可见        f.addWindowListener(new MyWindowListener());	}}class MyWindowListener extends WindowAdapter{	public void windowClosing(WindowEvent e){		Window window=(Window)e.getComponent();		window.dispose();	}}

3.使用匿名类实现事件处理

虽然在上一个程序中使用事件适配器实现了窗口关闭的功能,但是在实际开发中为了代码的简洁,经常使用匿名内部类创建事件监听器,针对所发生的事进行处理

程序为例:

第一种方法:

import java.awt.*;import java.awt.event.*;public class Main{	public static void main(String[] args)throws Exception{        Frame f=new Frame("我的窗体");//设置窗体名称        f.setSize(400, 300);//设置宽和高        f.setLocation(300, 200);//设置在屏幕中所属位置        f.setVisible(true);//设置窗体可见        f.addWindowListener(new WindowAdapter(){        	public void windowClosing(WindowEvent e){        		Window window=(Window)e.getComponent();        		window.dispose();        	}        });	}}

也可以使用第二种方法也就是在窗口中加入一个按钮点击按钮关闭程序

代码如下:

import java.awt.*;import java.awt.event.*;public class Main{	public static void main(String[] args)throws Exception{        Frame f=new Frame("我的窗体");//设置窗体名称        f.setSize(400, 300);//设置宽和高        f.setLocation(300, 200);//设置在屏幕中所属位置        f.setVisible(true);//设置窗体可见        Button btn=new Button("点击退出");        f.add(btn);        btn.addMouseListener(new MouseAdapter(){        	public void mouseClicked(MouseEvent e){        		System.exit(0);        	}        });	}}

 

 

 

 

转载地址:http://ouohn.baihongyu.com/

你可能感兴趣的文章
git 拉取gitlab 代码
查看>>
递归算法的时间复杂度
查看>>
数据结构之图(存储结构、遍历)
查看>>
使用sizeof计算类的大小
查看>>
乐观锁与悲观锁——解决并发问题
查看>>
operator 类型转换及重载
查看>>
HTTP状态码
查看>>
TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系
查看>>
TCP/IP详解--再次深入理解TCP网络编程中的send和recv
查看>>
TCP与UDP收发的时候TCP有缓冲区还是UDP有缓冲区,使用它们时该注意什么?
查看>>
C++中map、hash_map、unordered_map、unordered_set通俗辨析
查看>>
clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结
查看>>
运算符重载参数的顺序对运算是否有影响
查看>>
什么时候要用虚析构函数?
查看>>
序列化、反序列化与jsoncpp学习
查看>>
同步/异步与阻塞非阻塞的关系
查看>>
epoll模型讲解/源码分析
查看>>
ELF格式与bss段
查看>>
java继承 long和float小记点
查看>>
记录几点在开发中遇到的问题 2015-7-28 (会更新)
查看>>