第9章图形用户界面Word文档下载推荐.docx

上传人:b****6 文档编号:21395961 上传时间:2023-01-30 格式:DOCX 页数:23 大小:91.75KB
下载 相关 举报
第9章图形用户界面Word文档下载推荐.docx_第1页
第1页 / 共23页
第9章图形用户界面Word文档下载推荐.docx_第2页
第2页 / 共23页
第9章图形用户界面Word文档下载推荐.docx_第3页
第3页 / 共23页
第9章图形用户界面Word文档下载推荐.docx_第4页
第4页 / 共23页
第9章图形用户界面Word文档下载推荐.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

第9章图形用户界面Word文档下载推荐.docx

《第9章图形用户界面Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第9章图形用户界面Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。

第9章图形用户界面Word文档下载推荐.docx

●根据需要排列组件位置。

●响应事件

●定义图形用户界面的事件和各种界面元素对不同事件的响应,从而实现图形用户界面与用户的交互功能。

幻灯片8

9.1.2容器、组件和布局

组件可以分为两类:

①容器组件

容器组件是用来组织其他界面成分和元素的单元。

一般来说一个应用程序的图形用户界面首先对应于一个复杂的容器,如一个窗口。

这个容器内部包含若干界面组件,而这些组件本身又可以是容器组件,依此层进地构成一个复杂的图形界面系统。

②控制组件

控制组件是图形用户界面的最小单位,它内部不再包含其他的成分。

控制组件的作用是完成与用户的一次交互,这可能包括接受用户的一个命令,接受用户的一个文本输入,向用户显示一段文本或者图形等等。

幻灯片9

布局管理器:

●为了使我们生成的图形用户界面具有良好的平台无关性,Java提供布局管理器这个工具来管理组件在容器中的布局,而一般不使用直接设置组件位置和大小的方式。

如:

排列顺序、组件的大小、位置,当窗口移动和调整大小后组件如何变化等功能授权给一个容器的布局管理器来管理。

容器可以通过选择不同的布局管理器来决定布局。

幻灯片10

9.1.3事件驱动编程方法

●事件驱动编程方法是一种随着GUI的风行而产生的一种程序设计方法。

它最基本的思想就是通过“事件-响应”机制来对用户事件或者系统事件进行处理。

●一般情况下,存在一个监听器监听事件的发生,一旦监听器监测到事件,即转入处理该事件。

幻灯片11

幻灯片12

9.2.1AWT组件的类层次

●Component组件类是AWT组件的基类,它提供了基本显示和事件处理的特性。

Container类和其他许多GUI组件都是从Component类派生出来的。

幻灯片13

1.容器组件

容器组件是以Container为基类的任何类型组件。

①容器(Container)

Container类是一个抽象类,它提供了包含其他组件的能力,并负责布置它所包含的组件的位置。

注:

容器不能包含Window类及其子派生类的对象,而可以包含Component类其他任何派生类的对象。

幻灯片14

②面板(Panel)

 Panel类只是简单实现了Container类。

Panel对象是一个不包含标题栏、菜单栏以及边框的窗口容器。

Applet类是Panel类的子类,也是一个不包含标题栏、菜单栏以及边框的窗口容器。

Panel必须放在Window组件中才能显示,其他的组件可以调用Panel对象的add()方法添加到Panel对象中。

③窗口(Window)

 窗口类产生一个顶级窗口。

顶级窗口不包含在任何别的对象中,它直接出现在桌面上。

通常不会直接使用Window类,而是使用Window类的子类——Frame类。

幻灯片15

●④框架(Frame)

●Frame是Window类的子类,它包含了标题栏、边框、一个可选的菜单栏和调整大小的图标等属性。

●常用的构造方法有:

●Frame()

●Frame(Stringtitle)

●其默认初始大小为(0,0),并且为不可见,默认背景色为白色,标题由构造方法中的字符串给出。

●为了使Frame显示出来,可通过其父类Component的方法setSize(intwidth,intheight)将width,height设为非0值来设置其大小,

●用setVisible(booleanb)设为可见。

●用setBackground(Colorc)来设置背景色。

幻灯片16

⑤对话框(Dialog)

对话框是一个有标题和边框的窗口,通常用作获取用户的输入信息。

在创建一个对话框时,必须有一个窗体或另一个对话框作为它的宿主。

幻灯片17

2.组件

AWT中常用的组件及其功能描述

组件

功能描述

Button

按钮,用于完成一个命令

CheckBox

复选框,可以同时进行多个选择

CheckBoxGroup

单选框,只能在一组中选择一项

Choice

组合框,创建一个弹出式的选择菜单

List

列表框,创建一个选择列表

Menu

菜单,创建菜单系统

TextField

文本框,输入单行文字

Label

标签,在标签内显示字符

TextArea

文本区,输入多行文字

ScrollBar

滚动条,用于在指定的范围内选择一个值

幻灯片18

9.2.2布局管理器

●每个Container对象都有一个与它相关的布局管理器。

布局管理器是一个实现LayoutManager接口的任何类的实例。

布局管理器由setLayout()方法设定。

如果没有设定,则默认的布局管理器就被使用,每当一个容器被调整大小或第一次形成时,布局管理器都被用来布置它里面的组件。

幻灯片19

在程序中安排组件的位置和大小时,应该注意以下两点:

①容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。

如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。

②如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:

setLayout(null);

幻灯片20

常用的布局管理器

布局管理器

描述

FlowLayout

是Panel,Applet的缺省布局管理器。

其组件的放置规律是从左到右、从上到下进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边

BorderLayout

是Window,Frame和Dialog的缺省布局管理器。

BorderLayout布局管理器把容器分成5个区域:

North,South,East,West和Center,每个区域只能放置一个组件。

GridLayout

使容器中各个组件呈网格状布局,平均占据容器的空间。

Cardlayout

CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面。

幻灯片21

例:

importjava.awt.*;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

publicclasstest{

publicstaticvoidmain(String[]args){

myWindowmw=newmyWindow();

mw.pack();

//调整此窗口的大小,以适应其子组件的首选大小和布局

mw.setVisible(true);

//显示窗口

}

}

幻灯片22

classmyWindowextendsFrameimplementsActionListener{

privateButtonbutton1;

privateButtonbutton2;

privateTextFieldtextfield;

publicmyWindow(){

super("

按钮事件"

);

init();

幻灯片23

protectedvoidinit(){

this.setLayout(newFlowLayout());

textfield=newTextField();

button1=newButton("

按钮1"

button2=newButton("

按钮2"

button1.addActionListener(this);

//添加按钮事件监听器

button2.addActionListener(this);

this.add(textfield);

this.add(button1);

this.add(button2);

this.addWindowListener(newWindowAdapter(){

//添加窗口事件监听器

publicvoidwindowClosing(WindowEvente){

System.exit(0);

//退出应用程序

}

});

幻灯片24

//实现ActionListener接口的actionPerformed(ActionEvente)方法

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==button1)

textfield.setText("

按了按钮1"

else

按了按钮2"

this.pack();

幻灯片25

小结:

用AWT组件构建一个GUI应用程序的步骤:

①编写一个窗口类,继承自Frame。

将窗口中用到的组件定义为窗口类的成员,在窗口类的构造函数内完成应用程序GUI界面的构建工作。

②在窗口类的构造方法内或其他方法内,按照组件层序由高至低地构建每个组件。

③在窗口类的构造方法或其他方法体内,调用add()方法按照组件层序由高至低顺序地把所用的逐渐添加到对应的容器中。

即,先把画布、面板等容器类组件添加到主窗口上,再把底层组件添加到容器组件上。

④在main()方法体内创建一个窗口类的实例,即生成一个该GUI应用程序的主窗口,再用setVisible()方法显示主窗口。

幻灯片26

幻灯片27

9.3.1基于窗口的Java程序

●基于窗口的Java程序和控制台程序有着本质上的区别。

●对于控制台程序,启动程序后,程序代码决定了事件的顺序。

●基于窗口的应用程序和applet小程序在这方面则完全不同。

程序的操作是由图形用户界面上的事件决定的。

●例如,在单击鼠标按钮时,由操作系统首先进行注册,同时记录鼠标光标在屏幕上的位置。

然后,操作系统还要确定按下按钮时光标所在的窗口是由哪个应用程序控制,并将鼠标按下的行为转交给该程序。

程序从操作系统接收到的作为用户行为结果的信号称为事件。

幻灯片28

幻灯片29

9.3.2事件处理过程

●假设用户单击了程序图形用户界面中的一个按钮,该按钮就是这个事件的源。

●由鼠标单击而生成的这个事件,与程序中表示屏幕上该按钮的Button对象相关联。

一个事件通常有一个源对象,这里就是Button对象。

●当单击按钮时,生成一个表示并识别这个事件的新对象,这里是一个类型为ActionEvent的对象。

该对象包含了事件及事件源的信息。

任何转交给Java程序的事件都会由特定的事件对象表示,这个对象会作为处理事件方法的一个实参。

幻灯片30

●对应于单击按钮的事件对象将被传递给某个监听器对象,该监听器对象原先已提示对该类事件感兴趣,监听器对象仅是一种监听特定事件的对象。

●这里的“将事件传递给监听器”仅意味着事件源调用监听器对象中的一个特定方法,并以事件对象作为参数。

 

幻灯片31

幻灯片32

9.3.3AWT事件处理模型

在事件处理的过程中,主要涉及三类对象:

◇Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。

◇EventSource-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。

◇Eventhandler-事件处理者,接收事件对象并对其进行处理的对象。

幻灯片33

●由于同一个事件源上可能发生多种事件,因此java采取了授权处理机制(DelegationModel),事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。

●比如在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以授权给事件处理者一来处理鼠标事件,同时授权给事件处理者二来处理键盘事件。

有时也将事件处理者称为监听器,主要原因也在于监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。

幻灯片34

●授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。

事件处理者(监听器)通常是一个类,该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对的接口。

●例如,例5.9中类ButtonHandler之所以能够处理ActionEvent事件,原因在于它实现了与ActionEvent事件对应的接口ActionListener。

每个事件类都有一个与之相对应的接口。

幻灯片35

使用授权处理模型进行事件处理的一般方法归纳如下:

●①对于某种类型的事件XXXEvent,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener;

●②事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener(XXXListener)方法来注册监听器。

幻灯片36

1.事件类

●与AWT有关的所有事件类都由java.awt.AWTEvent类派生,它也是EventObject类的子类。

AWT事件共有10类,可以归为两大类:

低级事件和高级事件。

幻灯片37

●低级事件包括由键盘或鼠标引起的系统级别事件,以及与操作窗口相关联的事件,如:

鼠标的进入、点击、拖放,或组件的窗口开关等。

●高级事件(基于语义的事件),它是与组件相关的特定事件,如在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,或是选中项目列表的某一条就会触发ItemEvent事件。

幻灯片38

低级事件

●ComponentEvent(组件事件:

组件尺寸的变化、移动)

●ContainerEvent(容器事件:

组件增加、移动)

●WindowEvent(窗口事件:

关闭窗口、窗口闭合,图标化)

●FocusEvent(焦点事件:

焦点的获得和丢失)

●KeyEvent(键盘事件:

键按下、释放)

●MouseEvent(鼠标事件:

鼠标单击、移动)

幻灯片39

高级事件(语义事件)

●ActionEvent(动作事件:

按钮按下,TextField中按Enter键)

●AdjustmentEvent(调节事件:

在滚动条上移动滑块以调节数值)

●ItemEvent(项目事件:

选择项目,不选择"

项目改变"

●TextEvent(文本事件,文本对象改变)

幻灯片40

2.事件监听器

●每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。

●例如,与键盘事件KeyEvent相对应的接口是:

●publicinterfaceKeyListenerextendsEventListener{

●   publicvoidkeyPressed(KeyEventev);

●   publicvoidkeyReleased(KeyEventev);

●   publicvoidkeyTyped(KeyEventev);

●}

●注意到在本接口中有三个方法,那么java运行时系统何时调用哪个方法?

其实根据这三个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。

当键盘刚按下去时,将调用keyPressed()方法执行,当键盘抬起来时,将调用keyReleased()方法执行,当键盘敲击一次时,将调用keyTyped()方法执行。

幻灯片41

又例如窗口事件接口:

publicinterfaceWindowListenerextendsEventListener{

   publicvoidwindowClosing(WindowEvente);

     //把退出窗口的语句写在本方法中

   publicvoidwindowOpened(WindowEvente);

     //窗口打开时调用

   publicvoidwindowIconified(WindowEvente);

     //窗口图标化时调用

   publicvoidwindowDeiconified(WindowEvente);

     //窗口非图标化时调用

   publicvoidwindowClosed(WindowEvente);

     //窗口关闭时调用

   publicvoidwindowActivated(WindowEvente);

     //窗口激活时调用

   publicvoidwindowDeactivated(WindowEvente);

     //窗口非激活时调用

幻灯片42

AWT的组件类中提供注册和注销监听器的方法:

◇注册监听器:

  addXXXListener(XXXListener);

◇注销监听器:

  removeXXXListener(XXXListener);

幻灯片43

例如Button类:

(查API!

publicclassButtonextendsComponent{

  ……

  publicsynchronizedvoidaddActionListener(ActionListenerl);

  publicsynchronizedvoidremoveActionListener(ActionListenerl);

幻灯片44

3.AWT事件及其相应的监听器接口

●下表列出了所有AWT事件及其相应的监听器接口,一共10类事件,11个接口。

下面这张表应能牢牢记住。

幻灯片45

事件类别

描述信息

接口名

方法

 ActionEvent

激活组件

  ActionListener

 actionPerformed(ActionEvent)

 ItemEvent

选择了某些项目

  ItemListener

 itemStateChanged(ItemEvent)

 MouseEvent

鼠标移动

  MouseMotionListener

 mouseDragged(MouseEvent)

 mouseMoved(MouseEvent)

鼠标点击等

  MouseListener

 mousePressed(MouseEvent)

 mouseReleased(MouseEvent)

 mouseEntered(MouseEvent)

 mouseExited(MouseEvent)

 mouseClicked(MouseEvent)

 KeyEvent

键盘输入

  KeyListener

 keyPressed(KeyEvent)

 keyReleased(KeyEvent)

 keyTyped(KeyEvent)

幻灯片46

 FocusEvent

组件收到或失去焦点

FocusLis

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1