事件处理类
来源:互联网 发布:绿标网址域名防红跳转 编辑:程序博客网 时间:2024/06/17 12:13
事件处理类简介
Java提供了一整套的类库AWT(Abstract Window Tookit),它提供了各种GUI 界面开发的类。读者可以通过查相关的API来学习使用它。在这些API中重要的是事件处理的API,没有事件处理,搭再多的界面也没有用。
下面让我们看一看“事件处理”这一大家子都有那些成员,如图1
图一 事件处理的家族
看过“事件处理”的家谱之后,再简单介绍一下这个家族主要成员的独门绝技:
(1) Action Event:对应按钮的单击、菜单的选择、选择列表框等(大部分活都能干)。
(2) Adjustment Event:用户调整一个滚动条。
(3) Item Event:用户从一组选择框或者列表框中选一个。
(4) Text Event:文本框或者是文本域中的内容发生改变。
以上四个是语义事件类,就是外部用户可以看到的并能进行操作的,与Component Event是兄弟的关系。下面说一下低层事件类。即Component Event及它的儿孙们。
(1) Component Event:组件被缩放、移动、显示,它是所有低层事件的父类。
(2) Key Event:一个建被按下或者释放。
(3) Mouse Event:鼠标被按下、释放、移动或拖动。
(4) MouseWheel Event:鼠标滚轮滚动。
(5) Focus Event:组件得到焦点或失去焦点。
(6) Window Event:窗口激活、关闭或还原。
(7) Container Event:添加或者删除一个组件。
事件处理这个大家族除以上成员,还有十四个“长工”为它们服务,即十四个监听器接口,如图二。
图二 十四个监听器接口
以上就是事件家族类的成员与相关的接口,下面说一下事件控制的过程,首先在AWT已知的时间控制范围内,将事件源传到事件监听器中(就是那几个“长工”),然后由事件监听器中的功能对事件做出反应。即事件处理家族的那些成员的状态或其它方面发生变化,产生事件源,传到监听器中做出反应。例:我们按下鼠标,Mouse Event就产生了事件源,传给MouseListener做出反应(MouseListener中写功能函数)。
为了直观的反应事件的监听,下面是一个简单的程序,实现了当敲上下左右四键时,图形跟着动。此小程序是我在Eclipse中写的并运行成功,而且程序中有详细的注释,有兴趣的朋友可以看一下。
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.*;
public class LiZi extends KeyAdapter
{
JFrame frame;
//图形的坐标
int x;
int y;
LiZi()
{
x=100;
y=100;
frame = new JFrame();//创建窗口
frame.getContentPane().add(new Screen());
Container contentPane = frame.getContentPane();
frame.addKeyListener(this);//添加监听器
//窗口大小 frame.setSize(宽, 高);
frame.setSize(500, 500);
frame.setVisible(true);
frame.repaint();
}
//键盘的监听
public void keyPressed(KeyEvent evt)
{
//键盘处理(只有上、下、左、右四键)
switch (evt.getKeyCode())
{
case KeyEvent.VK_LEFT:
//键盘左箭头处理(在下面)
x=x-10;
break;
case KeyEvent.VK_RIGHT:
//键盘右箭头处理(在下面)
x=x+10;
break;
case KeyEvent.VK_DOWN:
//键盘下箭头处理(在下面)
y=y+10;
break;
case KeyEvent.VK_UP:
//键盘上箭头处理(在下面)
y=y-10;
break;
}
frame.repaint();
}
class Screen extends JComponent
{
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
//画图处理(在下面)
g2d.setColor(Color.RED);
g2d.fillRect(x, y, 20, 20);
}
}
public static void main(String[] args)
{
new LiZi();
}
public String 读键盘输入()//键盘事件源
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(
System.in));
String str = in.readLine();
return str;
}
catch (IOException e)
{
}
return null;
}
}
下面是运行结果,当按键盘上下左右键时,红块随着移动,如图三。
图三 运行结果
孟庆鑫
2009.6.27
- 事件处理类
- Android中进行事件处理?事件源、事件处理类、注册事件监听
- 事件处理
- 事件处理
- 事件处理
- 处理事件
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 处理事件
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- 事件处理
- VML极道教程(十二) VML编程大结局
- RegisterWindowMessage Function
- MessageBeep Function
- CSharp Tips:调用Win32 API如何处理指针类型的参数(补)
- .Net中的文件监视功能实现
- 事件处理类
- ubuntu默认root密码
- ::DialogBoxParam (hInstance, MAKEINTRESOURCE (IDD_WININFO), NULL, MainDlgProc, NULL);
- 解决Linux iptables防火墙和vsftpd的问题
- winform 程序的配置文件——App.config
- c语言 宏
- Head First C# 中文版 第12章 回顾与前瞻 page550
- Java 按行读取文本文件内容
- oracle 分析语句