• AWT事件处理


    AWT事件处理基本概念

    AWT事件处理过程中,主要涉及3类对象:

    ①   Event(事件):用户对组件的一个操作,称之为一个事件,以类的形式出现,例如,键盘操作对应的事件类是KeyEvent。其实例在该事件发生时由系统自动产生。每一种事件都对应专门的监听者。

    ②   Event Source(事件源):事件发生的场所,通常就是各个组件,例如按钮Button。

    ③   Event Monitor(事件监听器):接收事件对象并对其进行处理的类的对象,通常其中某个成员方法对事件进行相应的处理。

    注:Java采取了事件委托处理模型,事件源自己不处理事件,而是把其自身所有可能发生的事件委托给事件监听器来处理。

     

    事件:

    AWT的相关事件继承于java.awt.AWTEvent类,这些事件分为两大类:低级事件和高级事件。

    低级事件是值基于组件和容器的事件,当一个组件发生事件,如鼠标进入、点击、拖放或组件的窗口开关等时,触发了组件事件。

    ComponentEvent

    组件事件:组件尺寸的变化、移动

    ContainerEvent

    容器事件:组件增加、移动

    WindowEvent

    窗口事件:关闭窗口、窗口闭合、图标化

    FocusEvent

    焦点事件:焦点的获得和丢失

    KeyEvent

    键盘事件:键按下、释放

    MouseEvent

    鼠标事件:鼠标单击、移动

    高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖触发此事件的类。比如,在TextField中按下Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,选中列表的某一条就会触发ItemEvent事件。

    ActionEvent

    动作事件:按钮按下,TextField中按下Enter键

    AdjustmentEvent

    调节事件:在滚动条上移动滑块以调节数值

    ItemEvent

    项目事件:选择项目,不选择”项目改变”

    TextEvent

    文本事件:文本对象改变

    事件监听器:

    通常是一个类,该类必须实现与该事件类型相对应的接口。对应的接口被称为事件监听器接口。事件监听器接口类的名称与事件类的名称相对应。例如,MouseEvent事件类的监听器接口名为MouseListener。

     

    事件适配器类:

    Java为一些事件监听器接口提供了适配器类(Adapter)。我们可以通过继承事件所对应的Adapter类,重写所需要的方法,无关的方法则不用实现。事件适配器为我们提供了一种简单的实现监听器的手段,可以缩短程序代码。

    Java.awt.event包中定义的事件适配器类包括以下7个:

    ①   MouseAdapter(鼠标适配器)

    ②   MouseMotionAdapter(鼠标运动适配器)

    ③   KetAdapter(键盘适配器)

    ④   WindowAdapter(窗口适配器)

    ⑤   ComponentAdapter(组件适配器)

    ⑥   ContainerAdapter(容器适配器)

    ⑦   FocusAdapter(焦点适配器)

    在上一篇卡片布局中实现按钮翻动效果及窗口关闭等事件

    在方法中添加

     1     private void registerListener() {
     2         // 产生一个事件监听器对象
     3         BtnListener btnListener = new BtnListener();
     4         // 给4个按钮注册监听同一个事件监听器
     5         btnFirst.addActionListener(btnListener);
     6         btnPrevious.addActionListener(btnListener);
     7         btnNext.addActionListener(btnListener);
     8         btnLast.addActionListener(btnListener);
     9         
    10         //第一张中鼠标移动事件,显示坐标
    11         lb1.addMouseMotionListener(new MouseAdapter() {
    12             @Override
    13             public void mouseMoved(MouseEvent e) {
    14                 lb1.setText(e.getX() + ":" + e.getY());
    15             }
    16         });
    17         
    18         //第二张中鼠标移入、移出事件
    19         lb2.addMouseListener(new MouseAdapter() {
    20             @Override
    21             public void mouseExited(MouseEvent e) {
    22                 System.out.println("鼠标移出");
    23             }
    24             
    25             @Override
    26             public void mouseEntered(MouseEvent e) {
    27                 System.out.println("鼠标移入");
    28             }
    29         });
    30         
    31         //文本中键盘按下事件
    32         txtContent.addKeyListener(new KeyAdapter() {
    33             @Override
    34             public void keyPressed(KeyEvent e) {
    35                 System.out.println(e.getKeyChar());
    36             }
    37         });
    38         
    39         //窗口关闭事件
    40         this.addWindowListener(new WindowAdapter() {
    41             @Override
    42             public void windowClosing(WindowEvent e) {
    43                 System.exit(0);
    44             }
    45         });
    46     }
    47 
    48     // 成员内部类
    49     class BtnListener implements ActionListener {
    50 
    51         @Override
    52         public void actionPerformed(ActionEvent e) {
    53             /*
    54              * System.out.println(e.getActionCommand());
    55              * System.out.println(e.getSource());
    56              */
    57             Object obj = e.getSource();// 获得当前点击的事件源
    58             if (obj == btnFirst) {
    59                 cardLayout.first(cardPanel);
    60             } else if (obj == btnPrevious) {
    61                 cardLayout.previous(cardPanel);
    62             } else if (obj == btnNext) {
    63                 cardLayout.next(cardPanel);
    64             } else if (obj == btnLast) {
    65                 cardLayout.last(cardPanel);
    66             }
    67         }
    68     }
    卡片布局中的方法新增部分

    在构造函数中调用方法

     1 super(title); 2 init(); 3 registerListener(); 4  

    就可以实现按钮事件,及上述方法中提及的事件。

    完整的方法如下

      1 class MyFrame7 extends Frame {
      2     private Panel cardPanel = null;
      3     private Panel ctrolPanel = null;
      4     private CardLayout cardLayout = null;
      5     private FlowLayout flowLayout = null;
      6     private Label lb1, lb2, lb3, lb4;
      7     private Button btnFirst, btnPrevious, btnNext, btnLast;
      8     private TextField txtContent;
      9 
     10     public MyFrame7(String title) {
     11         super(title);
     12         init();
     13         registerListener();
     14     }
     15 
     16     public void init() {
     17         // 创建2个面板容器
     18         cardPanel = new Panel();
     19         ctrolPanel = new Panel();
     20 
     21         // 创建2个布局管理器
     22         cardLayout = new CardLayout();
     23         flowLayout = new FlowLayout();
     24 
     25         // 给容器设置指定的布局管理器
     26         cardPanel.setLayout(cardLayout);// 卡片容器中放置卡片布局
     27         ctrolPanel.setLayout(flowLayout);// 控制容器放置流式布局
     28 
     29         // 声明创建4个标签控件和一个文本框控件
     30         lb1 = new Label("第一页内容", Label.CENTER);
     31         lb2 = new Label("第二页内容", Label.CENTER);
     32         txtContent = new TextField();// 编辑文本框
     33         lb3 = new Label("第四页内容", Label.CENTER);
     34         lb4 = new Label("第五页内容", Label.CENTER);
     35 
     36         // 构建四个按钮对象
     37         btnFirst = new Button("第一张");
     38         btnPrevious = new Button("上一张");
     39         btnNext = new Button("下一张");
     40         btnLast = new Button("最后一张");
     41         ctrolPanel.add(btnFirst);
     42         ctrolPanel.add(btnPrevious);
     43         ctrolPanel.add(btnNext);
     44         ctrolPanel.add(btnLast);
     45 
     46         // 把四个标签控件和一个文本框控件添加到卡片容器中
     47         cardPanel.add(lb1);
     48         cardPanel.add(lb2);
     49         cardPanel.add(txtContent);
     50         cardPanel.add(lb3);
     51         cardPanel.add(lb4);
     52         this.add(cardPanel, BorderLayout.CENTER);// 将卡片容器放在中部
     53         this.add(ctrolPanel, BorderLayout.SOUTH);// 将控制容器放在南部
     54         this.setSize(400, 300);
     55         this.setVisible(true);
     56     }
     57 
     58     private void registerListener() {
     59         // 产生一个事件监听器对象
     60         BtnListener btnListener = new BtnListener();
     61         // 给4个按钮注册监听同一个事件监听器
     62         btnFirst.addActionListener(btnListener);
     63         btnPrevious.addActionListener(btnListener);
     64         btnNext.addActionListener(btnListener);
     65         btnLast.addActionListener(btnListener);
     66         
     67         //第一张中鼠标移动事件,显示坐标
     68         lb1.addMouseMotionListener(new MouseAdapter() {
     69             @Override
     70             public void mouseMoved(MouseEvent e) {
     71                 lb1.setText(e.getX() + ":" + e.getY());
     72             }
     73         });
     74         
     75         //第二张中鼠标移入、移出事件
     76         lb2.addMouseListener(new MouseAdapter() {
     77             @Override
     78             public void mouseExited(MouseEvent e) {
     79                 System.out.println("鼠标移出");
     80             }
     81             
     82             @Override
     83             public void mouseEntered(MouseEvent e) {
     84                 System.out.println("鼠标移入");
     85             }
     86         });
     87         
     88         //文本中键盘按下事件
     89         txtContent.addKeyListener(new KeyAdapter() {
     90             @Override
     91             public void keyPressed(KeyEvent e) {
     92                 System.out.println(e.getKeyChar());
     93             }
     94         });
     95         
     96         //窗口关闭事件
     97         this.addWindowListener(new WindowAdapter() {
     98             @Override
     99             public void windowClosing(WindowEvent e) {
    100                 System.exit(0);
    101             }
    102         });
    103     }
    104 
    105     // 成员内部类
    106     class BtnListener implements ActionListener {
    107 
    108         @Override
    109         public void actionPerformed(ActionEvent e) {
    110             /*
    111              * System.out.println(e.getActionCommand());
    112              * System.out.println(e.getSource());
    113              */
    114             Object obj = e.getSource();// 获得当前点击的事件源
    115             if (obj == btnFirst) {
    116                 cardLayout.first(cardPanel);
    117             } else if (obj == btnPrevious) {
    118                 cardLayout.previous(cardPanel);
    119             } else if (obj == btnNext) {
    120                 cardLayout.next(cardPanel);
    121             } else if (obj == btnLast) {
    122                 cardLayout.last(cardPanel);
    123             }
    124         }
    125     }
    126 }

    只需在主方法中实例化就可以使用

  • 相关阅读:
    Android控件之ListView探究二
    Android控件之Gallery探究
    Android控件之CheckBox、RadioButton探究
    如何解决虚拟机安装centos无法全屏显示问题!
    在Windows下远程桌面连接Linux XManager篇
    putty 中文乱码解决方法
    在IIS上启用Gzip压缩(HTTP压缩)
    LINUX下RPM的使用方法
    虚拟机和主机之间文本的复制和粘贴
    windows上透过Xmanager连接Centos的远程桌面
  • 原文地址:https://www.cnblogs.com/wzy330782/p/5428716.html
Copyright © 2020-2023  润新知