zoukankan      html  css  js  c++  java
  • Java GUI 事件监听

    现在使用的仍是AWT的事件模型。涉及到3类对象:

    • Event Source:事件源,即事件发生所在的组件
    • Event:事件,封装了此次事件的相关信息
    • Event Listener:事件监听器,监听事件,发生指定事件时自动调用对应的方法

    监听器可以继承接口自己写代码实现,也可以继承适配器(空实现),然后只重写部分方法的实现。

    事件可分为2类:

    1、低级事件:基于具体的动作,包括

    事件 触发条件 监听器  适配器 方法
    KeyEvent   键盘事件  按下、松开、单击键盘上的某个键时触发  KeyListener      KeyAdapter

    keyPressed:按下某个键时触发

    keyReleased:松开某个键时触发

    keyTyped:单击某个键时触发

    MouseEvent   鼠标事件  

     MouseListener

    MouseMotionListener

     MouseAdapter

    MouseMotionAdapter

    MouseListener的5个方法:

    mousePressed:按下某个鼠标键时触发

    mouseReleased:松开某个鼠标键时触发

    mouseClicked:单击某个鼠标键时触发

    mouseEntered:鼠标移入该组件时触发

    mouseExited:鼠标移出该组件时触发

    MouseMotionListener的2个方法:

    mouseMoved:在该组件上移动鼠标时触发

    mouseDragged:在该组件上按下某个鼠标键并移动鼠标时触发,如在画布上画图

    FocusEvent   焦点事件 获得焦点、失去焦点时触发  FocusListener  FocusAdapter

    focusGained:获取焦点时触发

    focusLost:失去焦点时触发

    WindowEvent  窗体事件

    打开窗口、关闭窗口,

    窗口最大化、最小化时触发

     WindowListener  WindowAdapter

    windowOpened:打开窗口时触发

    windowClosing:单击右上角的“X”时触发

    windowClosed:调用dispose()释放窗体资源时触发

    windowDeactivated:窗口失活(失去焦点)时触发

    windowDeiconified:窗口重新获得焦点时触发(恢复)

    windowActivated:窗口被激活(获得焦点)时触发,首次+恢复

    windowIconified:窗口最小化时触发

    ContainerEvent   容器事件 往容器中添加、移除组件时触发 ContainerListener   ContainerAdapter

    componentAdded:往容器中添加组件时触发

    componentRemoved:从容器中移除组件时触发

    ComponentEvent  组件事件

    组件的尺寸发生变化、

    位置发生改变、

    组件被隐藏/显示时触发

     ComponentListener  ComponentAdapter

    componentResized:组件尺寸发生变化时触发

    componentMoved:组件的位置发生改变时触发

    componentHidden:组件被隐藏时触发

    componentShown:组件被显示时触发

    PaintEvent  组件绘制事件 调用组件的paint()/update()来绘制时触发      

    2、高级事件(语义事件),不和具体的动作关联,只表示发生了该事件,包括:

    事件   触发条件 监听器 适配器 方法
    ActionEvent  动作事件 按钮、菜单项、输入框被单击/手动Enter时触发 ActionListener ActionAdapter actionPerformed
    AdjustmentEvent  调节事件 移动滑块调节数值值触发 AdjustmentListener AdjustmentAdapter adjustmentValueChanged
    ItemEvent 选中、取消选中某项时触发 ItemListener ItemAdapter itemStateChanged
    TextEvent 文本框、文本域中的文本发生改变时触发 TextListener TextAdapter textValueChanged

    以上接口中均只有一个抽象方法,若采用匿名内部实现,可使用lambda表达式。

    给组件添加事件监听:

    component.addXxxListener(XxxListener/XxxAdapter  listener);

    实现监听器的4种方式:

    1、内部类形式实现

    在此外部类中,可复用这个监听器,可直接访问外部类中所有的UI组件。

    若外部类中有多个组件要使用此监听器,可使用此种方式。

    2、匿名内部类形式实现

    简便,适合只使用一次的监听器。

    3、外部类形式实现

    监听器属于特定的GUI界面,使用外部类实现监听器,不利于提高程序的内聚性。

    且外部类形式的监听器不能访问其他类代表的GUI界面的组件。

    但可以被多个类共享。

    不推荐。

    4、类本身作为监听器(实现接口、继承改写适配器)

    代码混乱,可读性下降,不推荐。

    类代表的GUI界面主要负责显示逻辑,尽量不要将业务逻辑直接写在GUI类中,

    可以将业务逻辑写在单独的类/接口中,然后在显示逻辑中调用,降低了耦合,后期好维护。

  • 相关阅读:
    Qt助手---摘录
    Qt随记
    前端编码规范之CSS(转)
    给QT新手的练手项目——基于QT的GIF播放器(转)
    Qt收藏
    C++开发者都应该使用的10个C++11特性(转)
    为学Linux,我看了这些书(转)
    Qt去掉view项的焦点虚线框的方法(转)
    QTableWidget详解(样式、右键菜单、表头塌陷、多选等)(转)
    JZOJ 3085. 图的计数
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11070927.html
Copyright © 2011-2022 走看看