事件处理类

来源:互联网 发布:绿标网址域名防红跳转 编辑:程序博客网 时间:2024/06/17 12:13

                                                 事件处理类简介

Java提供了一整套的类库AWTAbstract 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

                                              

原创粉丝点击