AWT及AWT事件处理共15页文档
事件处理4

基本概念
事件源(event source):产生事件的对象。如在 一个按钮上单击鼠标时,该按钮是事件源,会产 生一个ActionEvent类型的事件。
事件监听者(Listener):Java程序把事件进行处理 的方法放在一个类对象中,这个类对象就是事件 监听者。事件源通过调用相应的方法将某个对象 设置为自己的监听者,监听者有专门的方法来处 理事件。
常用方法:
public String getActionCommand()返回与此动作相关的命 令字符串。
public long getWhen()返回发生此事件时的时间戳。 public int getModifiers()返回发生此动作事件期间按下的组
合键。 public Object getSource() 最初发生 Event 的对象。
} public static void main(String[] args){ GUIDemo8 d=new GUIDemo8(); }
}
选项事件类 ItemEvent
当用户在窗口中的带有可选择功能的组件中进行 选取操作时所发生的事件.
选项事件ItemEvent的监听者是ItemListener. 该接口中提供的事件处理方法只有一个 itemStateChanged(ItemEvent e),当组件中 的选项状态改变时,将调用该方法.
public GUIDemo8() { jta=new JTextArea(); jp1=new JPanel(); String[] chatters={"红红","白白","蓝蓝"}; jcb=new JComboBox(chatters); jtf=new JTextField(10); jb=new JButton("发送"); jsp=new JScrollPane(jta);
Java-AWT事件处理

2019/3/19
13
窗口事件处理
接口:WindowListener。 方法:打开执行windowOpened(),单击窗口右 上角关闭按钮执行windowClosing(),单击最小 化按钮执行windowIconified()和 windowDeactivated(),鼠标单击其他窗口也 会执行windowDeactivated(),由最小化恢复 会执行windowDeiconified()和 windowActivated(),当前窗口为其他窗口 时单击该窗口,也会执行windowActivated(), 窗口被关闭,则执行windowClosed(). 方法参数:WindowEvent e
2019/3/19
15
动作事件的处理(文本框)
}
ActionListener除了用于鼠标单击按钮外,单行文本框中的回车、列表框中双击 选择某个选项也可以用其处理。 import java.awt.*; import java.awt.event.*; class xx implements ActionListener{ TextField t=new TextField(“you can enter here”,35); t.addActionListener(this); //即单行文本框可以自动监听。 …………… public void actionPerformed(ActionPerformed e){ String s=t.getText(); System.out.println(s); } 注意:对于多行文本框TextArea,不能自动监听,可以添加按钮来实现检查和提 交功能。
按钮添加监听:button.addActionListener(事件处理器);
AWT事件处理模型

ComponentEvent(组件事件:组件尺寸的变化,移动)
ContainerEvent(容器事件:组件增加,移动)
WindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)
FocusEvent(焦点事件:焦点的获得和丢失)
KeyEvent(键盘事件:键按下、释放)
MouseEvent(鼠标事件:鼠标单击,移动)
ContainerEvent
容器中增加删除了组件
ContainerListener
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
TextEvent
文本字段或文本区发生改变
TextListener
textValueChanged(TextEvent)
AWT事件处理模型
上一节中的主要内容是如何放置各种组件,使图形界面更加丰富多彩,但是还不能响应用户的任何操作,要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象:
◇Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。
//窗口关闭时调用
public void windowActivated(WindowEvent e);
//窗口激活时调用
public void windowDeactivated(WindowEvent e);
//窗口非激活时调用
}
AWT的组件类中提供注册和注销监听器的方法:
◇注册监听器:
public void add<ListenerType> (<ListenerType>listener);
AWT事件处理

Java AWT事件处理1 AWT事件处理基本概念AWT事件处理的过程中,主要涉及3类对象。
(1) Event(事件):用户对组件的一个操作,称之为一个事件,以类的形式出现,例如,键盘操作对应的事件类是KeyEvent。
其实例在改事件发生时有系统自动产生。
(2) Event Source(事件源):事件发生的场所,通常就是各个组件,例如按钮Button。
(3) Event Monitor(事件监听器):接收事件对象并对其进行处理的类的对象,通常其中某个成员方法对事件进行相应的处理。
事件委托处理模型图10-10 事件委托处理模型Java采取了事件委托处理模型(Delegation Model),事件源自己不处理事件,而是把在其自身所有可能发生的事件委托给事件监听器来处理。
比如,在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以委托给事件监听器1来处理鼠标事件,同时委托给事件监听器2来处理键盘事件。
委托模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。
2 事件事件分类。
按事件的性质分类java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。
AWT的相关事件继承于java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件。
(1)低级事件低级事件是指基于组件和容器的事件,当一个组件上发生事件,如鼠标的进入、点击、拖放等,或组件的窗口开关等时,触发了组件事件。
—ComponentEvent(组件事件:组件尺寸的变化、移动);—ContainerEvent(容器事件:组件增加、移动);—WindowEvent(窗口事件:关闭窗口、窗口闭合、图标化);—FocusEvent(焦点事件:焦点的获得和丢失);—KeyEvent(键盘事件:键按下、释放);—MouseEvent(鼠标事件:鼠标单击、移动)。
第13章事件处理(第4版)

实现上述的接口,针对想要捕获的事件编写方法代码 。如要捕获单击按钮事件,就要为ActionListener接口 里的actionPerformed()方法编写代码。
为事件监听者创建一个对象,让自己的组件和方法完 成对它的注册,方法是在监听者接口的名字里加入一 个前缀“add”,如addActionListener()
待用户通过鼠标、键盘给它通知(消息驱动), 它再根据这个通知的内容进行相应的处理(事件 驱动)。 通常一个键盘或鼠标操作会引发一个系统预先定 义好的事件,用户只需编写代码,定义每个特定 事件发生时程序应做出何种响应即可。
3
13.1 委托事件处理
事件(event):用户使用鼠标或键盘对窗口中的组 件进行交互时所发生的事情。对这些事件做出响 应的程序,称为事件处理程序(Event Handler)。
见教材例13.5
20
13.6 文本组件及相应的事件处理
文本组件所触发的事件主要有动作事件 ActionEvent和文本变化事件CaretEvent 。 见教材例13.6
21
13.7 窗口组件及窗口事件处理
Window类的任何子类都可能触发下列的窗口事 件:打开窗口、正在关闭窗口、关闭窗口、激活窗 口、变成非活动窗口、最小化窗口和还原窗口。 Window类常用方法见教材表13.8
5
13.1 委托事件处理
Java语言规定:为了让监听者能对事件源发生的 事件进行处理,创建该监听者对象的类必须声明 实现相应的监听者接口或继承相应的适配类,即 必须在类体中具体定义该接口中所有方法的方法 体或覆盖适配器类中的相应方法,以供监听者自 动调用相应事件处理方法来完成对应事件的任务 ,这些处理事件的方法就是事件处理程序。
JCheckBoxMenuItem类的构造方法及常用方法 见教材表13.30、13.31。
Java第06章--1(AWT与Swing)

• • 视图(view):它专门负责组件的绘制工作,主要涉及 paint()方法。MVC设计范式的最大优点是一个模型可以 有多个视图,每个视图是一个不同侧面但内容却是完整的。 • 一个模型的几个视图都是从不同侧面、用完整的内容来描 述同一个模型。当模型的控制器要修改其内容时,均会通 知这每个视图,它们都会自动地更新自己的视图显示。 • • 控制器(controller):专门负责管理和处理组件所接 收到的事件,这些事件可能来自用户的操作。如键盘输入、 鼠标点击和拖放等,也可能来自系统,如系统计时器发出 的事件。 • 视图和其控制器之间的通信不仅频繁且非常复杂,因此 JFC系统把两者封装成一个整体。
• • 模型(model):模型负责获取和管理组件的状态,用户若 需要询问组件的状态时,实际上是询问该组件的模型。 • 若要询问Swing型按钮组件(JButton 类的一个对象)的状 态,可调用JButton 类的父类javax.swing.AbstractButton所 提供的isSelected()方法,它定义为: – public boolean isSelected() { ... } – 该方法返回一个逻辑值,若为true则该按钮组件被压下,反 之返回false则按钮是松开状态。 • javax.swing包中的各种组件,对于描述该组件状态和内容的 模 型 都 是 用 以 Model 结 尾 的 接 口 实 现 , 例 如 , 对 于 按 钮 在 javax.swing包中有一个如下定义的接口: – public interface ButtonModel extends ItemSelectable { ... } • 每个JButton类的对象都保存着一个表示该按钮组件模型的对 象,调用其父类AbstractButton的方法就可以得到它,即: – JButton b = new JButton( "确定" );
AWT组件及事件处理(三)

public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { setBackground(Color.cyan); } else if(e.getSource()==button2) { setBackground(backColor); } } }
public void actionPerformed(ActionEvent e) {if(e.getSource() == tf) ta2.setText(tf.getText()); } public void textValueChanged(TextEvent e) {if(e.getSource() == ta1) ta2.setText(ta1.getText()); } }
CardLayout(卡片式布局)将每个组件看作一张 卡片,一个容器中可以加入多张卡片,但每次只 有一个可见。也称“多层页面设置”,它把每一 个组件都视为容器中的一层,每一个组件都会布 满整个容器。这些组件都会赋予一个名称,然后 再依这个名称来控制组件是否显示。 假设有一个容器con,使用CardLayout的一般步骤: 1、创建CardLayout布局对象 如:CardLayout card=new CardLayout(); 2、使用setLayout( )为容器设置布局 如:con.setLayout(card);
ScrollPane():创建滚动面板,滚动条初始不可见。
ScrollPane(int a) : 用指定的参数创建一个滚动 面板。a的取值为:
Scrollpane.SCROLLBARS-ALWAYS Scrollpane.SCROLLBARS-AS-NEEDED Scrollpane.SCROLLBARS-NEVER
AWT编程

– title:指定该对话框的窗口标题。 – modal:指定该对话框是否是模式的,可以是true或false。
FileDialog
• Dialog类还有一个子类:FileDialog,它代 表一个文件对话框,用于打开、或者保存 文件,FileDialog也提供了几个构造器,分 别可支持parent、title和mode三个构造参数, 其中parent、title指定文件对话框的所属父 窗口和标题,而mode用于指定该窗口用于 打开文件、或保存文件,该参数支持如下 两个参数值:FileDialog.LOAD、 FileDialog.SAVE。
BorderLayout(con.)
• BorderLayout布局格式:当改变容器大小 时
– 当某个区域没有组件时,它的空间会被自动占 满。
– North, South和CentNero区rth域水平调整 – East, West和Center区域垂直调整
Center
South
East West
AWT的问题
• 使用AWT作出的图形用户界面在所有平台 上都显得很丑陋,功能也非常有限。
• AWT为了迎合所有主流操作系统的界面设 计,AWT组件只能使用这些操作系统上图 形界面组件的交集,所以不能使用特定操 作系统上复杂的图形界面组件,最多只能 使用四种字体。
• AWT用的是非常笨拙的,非面向对象的编 程模式。
绝对定位
• Java也提供了那种拖控件的方式,即Java 也可以对GUI组件进行绝对定位。在Java 容器中采用绝对定位的步骤如下:
– (1)将Container的布局管理器设成null: setLayout(null)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
first(Container c); next(Container c); previous(Container c); last(Container c); show(Container c,String name)
每个容器都有一个默认的布局管理器,可通过调用 setLayout()改变。
Java提供以下几种布局管理器: FlowLayout——流式布局; BorderLayout——边界布局; GridLayout——网格布局; CardLayout——卡片布局; GridBagLayout——网格包布局; 1.FlowLayout—流式布局管理器 FlowLayout是Panel和Applet的默认布局管理 器。容器内的组件采用从左到右,从上到下逐行摆 放。 FlowLayout类的构造方法有:
2.Panel(面板) Panel(面板)不能单独显示,必须放在Window或
Frame中,Panel是一块无边框的区域,其中也可以 放
入基本组件。 8.2.3 布局管理器(layout Manager)
Java在容器中设置布局管理器来负责对容器内的组 件进行管理。
布局管理器决定容器的布局策略及容器内组件的排 列顺序、组件大小和位置,以及当窗口移动或调整大 小后组件如何变化等。
BorderLayout是Window、Dialog和Frame的默 认布局管理器。
BorderLayout布局管理器将容器分为五个区:E、 W、S、N、C。
BorderLayout的构造方法: ◆ BorderLayout( ):组件之间没有水平、垂直间隙。 ◆ BorderLayout(int hgap,int vgap):组件之间有间 隙。
同样大小的网格单元。每个单元可容纳一个组件,并 且此组件将充满网格单元。组件按照从左至右,从上 至下的顺序填充。
GridLayout的构造方法: ◆GridLayout():容器划分为一行一列的网格。 ◆GridLayout(int rows,int cols):容器划分为指定行、
列数目的网格。
◆GridLayout(int rows,int cols,int hgap,int vgap): 容器划分为指定行、列数目的网格,并且指定组件
◆FlowLayout():组件居中摆放。 ◆FlowLayout(int align):组件按参数指定的对齐方式 摆放。LEFT—0,CENTER—1,RIGHT—2。 ◆ FlowLayout(int align,int hgap,int vgap):参数按 指定方式摆放,组件之间水平、垂直间距分别由 hgap、vgap参数指定。 2、BorderLayout布局管理器
AWT与Swing的区别:Swing组件的实现没有采 用任何本地代码,完全由Java语言实现,具有平台 独立的API并具有平台独立的实现.
8.1.2 java.awt包
AWT包所提供的类和接口主要功能包括:用户界 面组件;事件处理模型;图形和图象工具;布局管理 器;数据传送类等等。
AWT的类层次结构(P211).
(TextField)、对话框(Dialog)。 【注】
组成GUI的组件,不能独立使用,必须放在容器内。 8.2.2 容器(Container)
容器是Component的抽象类的一个子类。一个容器可 以容纳多个组件,并使它们称为一个整体。
使用容器可以简化图形界面的设计,以整体结构来布 置 界面。容器本身也是一个组件,具有组件的所有性质,另 外还有容纳其他组件的功能。
间的水平与垂直间隙。 4、CardLayout布局管理器
CardLayout可以使两个或更多的组件共享同一显 示空间。Card把这些组件像一系列卡片一样叠放, 一个时刻只有最上面的是可见的。
CardLayout的构造方法有:
◆CardLayout():没有上下左右边界间隙。 ◆CardLayout(int hgap,int vgap):指定边界的间隙.
8.2 基于AWT的GUI构建方法
构建基于AWT的GUI,关键是了解AWT中组件、 容器和布局管理器以及它们之间的关系。
8.2.1 组件 组件是GUI的基本组成元素。所有AWT的组件都是
抽象类Component或MenuComponent类的子类。
常用的组件包括:按钮(Button)、复选框(Checkbox) 下拉菜单(Choice)、框架(Frame)、标签(label)、列表 (List)、面板(Panel)、文本区(TextArea)、文本域
BorderLayout的add()方法:
◆ public Component add(String name,Conponent comp) ◆ public void add(Component,Object constraints)
3、GridLayout布局管理器 GridLayout布局管理器把容器分成网格n行m列
有三种类型的容器:Window,Panel,ScrollPane. 所有的组件都可以通过add()方法向容器中添加组件。
1.Frame(框架) Frame可以作为Java的顶级窗口使用,它是
Windows类的子类,带有标题并可改变大小。 Frame类的构造方法有:
Frame(); Frame(String title); Frame类的常用方法: setSize(int , int); setBackground(Color c); setResizable(boolean resizable); setVisible(boolean b);
第八章 AWT及AWT事件处理
AWT是Java中支持图形化用户界面GUI设计的一个
工具集.GUI实现应用与用户的交互,是一个应用程序的
重要组成部分.
8.1 AWT概述
8.1.1 AWT基本原理
为满足Java程序的可移植性要求,AWT类库中的 各种操作被定义成在一个抽象窗口中进行。抽象窗 口使得界面的设计能够独立于界面的实现,使得利 用AWT开发的GUI能够适用于所有的平台系统。