事件模型
1.事件的处理方法
Java的事件处理方法是基于授权事件模型
GUI是事件(event)驱动的,当用户与GUI交互可以产生事件(events)
1.1事件源
- 事件源:可供用户进行交互的GUI组件
- 事件源是一个对象,一个事件源可能会生成不同类型的事件。
1.2事件
- 事件:一个描述事件源状态改变的对象
- 事件对象
- 封装了包含所有发生的各种事件信息
- 包括:事件源的引用、事件监听器在处理事件时所需要的其他各种信息
- 事件信息被包含在类AWTEvent或子类的实例对象中
- 封装了包含所有发生的各种事件信息
- 通过鼠标、键盘与界面交互会生成事件如:
- 按下一个按钮
- 输入一个字符
- 点击一下鼠标等
1.3事件监听器
- 事件监听器:接受事件对象,并处理事件对象
- 事件监听器对象属于一个类的实例,是“监听器接口”的实现类
- 监听器对象使用事件对象中的信息来确定它们对事件的响应
监听器类 — — MyListenerAction
1.4监听器接口
- 监听器通过实现java.awt.event包中定义的一个或多个接口来创建
- 在发生事件时,事件源将调用监听器定义的相应方法
事件监听器 | 方法 |
ActionListener | actionPerformed |
AdjustmentListener | adjustmentValueChanged |
ComponentListener | componentResized componentMoved componentShown componentHidden |
ContainerListener | componentAdded componentRemoved |
FocusListener | focusLost focusGained |
ItemListener | itemStateChanged |
KeyListener | keyPressed keyRelesed keyTyped |
MouseListener | mouseCliked mouseEntered mouseExited mousePressed mouseRelesed |
MouseMotionListener | mouseDragged mouseMoved |
TextListener | textChanged |
WindowListener | windowActivated、windowDeactivated windowClosed、windowClosing windowIconified、windowDeiconified windowOpened |
如果一个类实现了一个接口,它必须实现这个接口中的所有方法。
适配器类
- 为了使事件处理变得简单,Java为具有多个方法的监听器接口提供适配器类。
- 适配器类实现并提供了一个事件监听器接口的所有方法,但这些方法都是空方法。
- 要使用适配器类做监听器要继承(extends)
事件监听器接口 适配器类 ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter KeyListener KeyAdapter MouseListener MouseAdapter MouseMotionListener MouseMotionAdapter WindowListener WindowAdapter
2.AWT事件类型
AWT分为“低级事件”和“语义事件”
- 语义事件:用户正在做什么
- 低级事件:语义事件的基础
事件类(接口) | 说明 | 事件源 |
ActionEvent | 按下按钮,双击列表项或选中一个菜单项时,就会生成此事件 | Button、List、MenuItem、TextField |
AdjustmentEvent | 操纵滚动条时会生成此事件 | Scrollbar |
ComponentEvent | 当一个组件移动、隐藏、调整大小或成为可见时会生成此事件 | Component |
ItemEvent | 单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件 | Checkbox、CheckboxMenuItem、 Choice、List |
FocusEvent | 组件获得或失去键盘焦点时会生成此事件 | Component |
KeyEvent | 接收到键盘输入时会生成此事件 | Component |
MouseEvent | 拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件 | Component |
ContainerEvent | 将组件添加至容器或从中删除时,会生成此事件 | Container |
TextEvent | 在文本区域或文本域的文本改变时会生成此事件 | TextField、TextArea |
WindowEvent | 当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时,会发生此事件 | Window |
3.焦点事件
- 任何GUI对象的获得或失去焦点都被视为焦点事件
- 事件源必须向事件监听器通知事件对象已失去或已获得的焦点。
- 焦点监听器需要实现两个方法:
- focusGained 和 focusLost
tf.addFocusListener new FocusListener(){
public void focusGained(FocusEvent e)
{
jl.setText("获得焦点");
}
public void focusLost(FocusEvent e)
{
jl.setText("失去焦点");
}
}
4.键盘事件
- 在按下或释放键盘上的一个键时,将生成键盘事件
- keyEvent类包含用来表示按下或点击的键的常量
- 生成keyEvent时将调用keyListener
- 如果程序需要处理特殊的键,如方向键,可以调用keyPressed()fangfa来处理
5.多个监听器
- 所有AWT事件源均支持监听器的多点传送模型
- 可以将同一事件发送到多个监听器对象
- 需要像一个事件源添加多个监听器,以便使所有注册的监听器都能对事件源生成的事件做出响应
菜单与对话框
1.菜单
- 菜单构成要素
- 菜单栏(menu bar)
- 菜单(menu)
- 菜单项(menu item)
- 与菜单相关的类
- JMenuBar
- 需要两个附加类
- SingleSelectionModel类:跟踪当前选定的菜单
- LookAndFeel类:负责绘制菜单栏以及对在其中发生的事件作出响应
- 需要两个附加类
- JMenu
- 需要两个附加类
- JPopupMenu类:用于显示JMenu的菜单项(弹出菜单)
- LookAndFeel类:负责绘制菜单栏以及对在其中发生的事件作出响应
- 需要两个附加类
- JMenuItem
- JCheckBoxMenuItem(extends JMenuItem)(复选按钮的菜单项)
- JRadioButtonMenuItem(extends JMenuItem)(单选按钮的菜单项)
- JMenuBar
1.1编写菜单
- 创建菜单栏:(Menu bar)
- 给容器设置菜单栏,容器举例:JFrame、JApplet
- setJMenuBar(myBar);
- 创建菜单
- 设置记忆符(Mnemonic)
- 创建菜单项
- 设置记忆符(Mnemonic)
- 类似于按钮,设置事件监听器,进行事件处理
- 将菜单项加入合适的菜单中
- myMenu.add(myItem);
- 在菜单项间增加隔(separator)
- myMenu.addSeparator();
- 将子菜单加入到菜单中
- myMenu.add(mySubMenu);
- 将菜单加入到菜单栏中
- myMenuBar.add(myMenu);
2.对话框
2.1java.awt.Dialog类
- Dialog(Frame f)
- Dialog(Frame f,boolean b)
- Dialog(Frame f,String s)
- Dialog(Frame f,String s,boolean b)
- setTitle()/getTitle()
- setModal()/setSize()/setVisible()
2.2java.awt.FileDialog类
- Dialog类
- 构造方法
- FileDialog(Frame f)
- FileDialog(Frame f,String s)
- FileDialog(Frame f,String s,int m)
- 常用方法
- getDirectory()
- setDirectory()
- setFile()