Java图形用户界面

事件模型 

1.事件的处理方法 

Java的事件处理方法是基于授权事件模型 

GUI是事件(event)驱动的,当用户与GUI交互可以产生事件(events)

1.1事件源   

  • 事件源:可供用户进行交互的GUI组件
  • 事件源是一个对象,一个事件源可能会生成不同类型的事件。 

1.2事件 

  • 事件:一个描述事件源状态改变的对象
  • 事件对象
    • 封装了包含所有发生的各种事件信息
      • 包括:事件源的引用、事件监听器在处理事件时所需要的其他各种信息 
    • 事件信息被包含在类AWTEvent或子类的实例对象中
  •  通过鼠标、键盘与界面交互会生成事件如:
    • 按下一个按钮
    • 输入一个字符
    • 点击一下鼠标等

1.3事件监听器

  • 事件监听器:接受事件对象,并处理事件对象
  • 事件监听器对象属于一个类的实例,是“监听器接口”的实现类
  • 监听器对象使用事件对象中的信息来确定它们对事件的响应 

监听器类 — — MyListenerAction 

1.4监听器接口 

  • 监听器通过实现java.awt.event包中定义的一个或多个接口来创建
  • 在发生事件时,事件源将调用监听器定义的相应方法 
事件监听器方法
ActionListeneractionPerformed
AdjustmentListeneradjustmentValueChanged
ComponentListener

componentResized

componentMoved

componentShown

componentHidden

ContainerListener

componentAdded

componentRemoved

FocusListener

focusLost

focusGained

ItemListeneritemStateChanged
KeyListener

keyPressed

keyRelesed

keyTyped

MouseListener

mouseCliked

mouseEntered

mouseExited

mousePressed

mouseRelesed

MouseMotionListener

mouseDragged

mouseMoved

TextListenertextChanged
WindowListener

windowActivated、windowDeactivated

windowClosed、windowClosing

windowIconified、windowDeiconified

windowOpened

如果一个类实现了一个接口,它必须实现这个接口中的所有方法。 

适配器类 

  • 为了使事件处理变得简单,Java为具有多个方法的监听器接口提供适配器类。
  • 适配器类实现并提供了一个事件监听器接口的所有方法,但这些方法都是空方法
  • 要使用适配器类做监听器要继承(extends)
事件监听器接口适配器类
ComponentListenerComponentAdapter
ContainerListenerContainerAdapter
FocusListenerFocusAdapter
KeyListenerKeyAdapter
MouseListenerMouseAdapter
MouseMotionListenerMouseMotionAdapter
WindowListenerWindowAdapter

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)(单选按钮的菜单项)

 

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值