收藏 分享(赏)

java程序设计教程 第11章-图形用户界面.ppt

上传人:weiwoduzun 文档编号:5005763 上传时间:2019-01-29 格式:PPT 页数:59 大小:763KB
下载 相关 举报
java程序设计教程 第11章-图形用户界面.ppt_第1页
第1页 / 共59页
java程序设计教程 第11章-图形用户界面.ppt_第2页
第2页 / 共59页
java程序设计教程 第11章-图形用户界面.ppt_第3页
第3页 / 共59页
java程序设计教程 第11章-图形用户界面.ppt_第4页
第4页 / 共59页
java程序设计教程 第11章-图形用户界面.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

1、1,第11章 图形用户界面,2,本章学习目标,了解图形用户界面的历史及其设计原则。 掌握AWT组件集中的各类组件。 理解AWT事件处理机制。 学会编写常见事件处理程序。 了解Swing组件集及其简单编程。,3,概述,图形用户界面,英文全称为Graphical User Interface,一般习惯简称为GUI。 图形化用户界面大大方便了人机交互,是一种结合计算机科学、美学、心理学、行为学,及各商业领域需求分析的人机系统工程,强调人机环境三者作为一个系统进行总体设计。,4,设计原则,用户至上的原则 交互界面要友好 配色方案要合理,5,主流开发工具集,基于Java的图形用户界面开发工具(即组件集)

2、最主流的有三种: AWT Swing SWT/JFace,随Sun的JDK一起发布,源于IBM的Eclipse开源项目,6,AWT组件集,AWT由JDK的java.awt包提供,里面包含了许多可以用来建立图形用户界面(GUI)的类,一般称这些类为组件(component),图11-1 AWT组件的继承关系图,7,AWT组件集,AWT组件大致可以分为以下三类:(1)容器类组件(2)布局类组件(3)普通组件类,8,容器类组件,容器类组件由Container类派生而来,常用的有Frame类和Dialog类,以及Panel类型的Applet类。这些容器类组件可以用来容纳其他普通组件或者甚至是容器组件自

3、身,起到组织用户界面的作用。 容器类组件有一定的范围和位置,并且它们的布局从整体上也决定了所容纳组件的位置 因此,在界面设计的初始阶段,首要考虑的就是容器类组件的布局。,9,布局组件类,布局类组件是非可视组件,它们能很好地在容器中布置其他可视组件。AWT提供了五种基本的布局方式:FlowLayout、BorderLayout、GridLayout、GridBagLayout和CardLayout等,它们均为Object类的子类,如下图11-2所示。,图11-2 布局方式,10,FlowLayout,FlowLayout是最简单的一种布局方式,被容纳的可视组件从左向右,从上至下依次排列,若一组件

4、在本行放置不下,就自动排到下一行的开始处,该方式为Panel类和Applet类容器的默认布局方式。,示例11-1源程序,11,BorderLayout,BorderLayout布局方式的特点是:将容器划分为“东”“西”“南”“北”“中”五个区。 每个区可以摆放一个组件,因此最多可以在BorderLayout的容器组件中放置五个子组件。 Frame或Dialog容器类组件的默认布局方式。,示例11-3源程序,12,GridLayout,GridLayout布局将容器划分为行和列的网格,每个网格单元可以放置一个组件,组件通过add()方法从上到下,从左至右顺序加入网格各个单元中 GridLayou

5、t布局允许在组件之间设置水平和垂直间距,间距同样以像素为单位表示,如下为创建6行6列,水平间隔和垂直间隔均为10个像素的GridLayout布局对象:setLayout(new GridLayout(6,6,10,10);,示例11-4源程序,13,图11-10 GridLayout布局界面,14,GridBagLayout,GridBagLayout是所有AWT布局管理方式中最繁的,同时也是功能最强的。 GridBagLayout设置的所有行和列可以大小不同。 GridBagLayout允许不同组件在容器中占据不同大小的矩形区域。 GridBagLayout由一个专用的类来对布局行为进行约束

6、,该类为GridBagConstraints,它的所有成员都是public(公有)的,要掌握如何使用GridBagLayout布局,关键在于熟悉这些约束变量,以及如何进行设置。,15,GridBagConstraints的常用属性,public girdx /组件所处位置的起始单元格列号public gridy /组件所处位置的起始单元格行号public gridheight /组件在垂直方向占据的单元格个数public gridwidth /组件在水平方向占据的单元格个数public double weightx /容器缩放时,单元格在水平方向的缩放比例public double weigh

7、ty /容器缩放时,单元格在垂直方向的缩放比例public int anchor /当组件较小时指定其在网格中的起始位置public int fill /当组件分布区域变大时指明是否缩放,以及如何缩放public Insets insets /组件与外部分布区域边缘的间距public int ipadx /组件在水平方向的内部缩进public int ipady /组件在垂直方向的内部缩进,16,示例11-5源程序,示例11-6源程序,17,CardLayout,CardLayout布局将组件(通常是Panel类的容器组件)象扑克牌(卡片)一样摞起来,每次只能显示其中的一张,实现分页的效果,每

8、一页中可以有各自的界面,这样就相当于扩展了原本有限的屏幕区域。,示例11-7源程序,18,CardLayout布局组件提供了以下方法来对各张Card页面进行切换:public void first (Container parent) /显示第一张卡片public void next (Container parent) /显示下一张卡片public void previous (Container parent) /显示上一张卡片public void show (Container parent,String name) /显示指定卡片public void last (Container

9、 parent) /显示最后一张卡片,19,Hint,有些Java IDE(如JBuilder)也提供广大编程者所熟悉的基于绝对像素坐标的XYLayout布局方式(用户在此布局方式下可以进行可视化的拖放操作) Java用户界面设计的独到之处恰恰在于其与平台无关的布局方式。 一般不建议采用XYLayout布局,它不但使用起来要依赖于特定的包,还有损Java独立性,不利于程序移植,除非用户认定所编写的程序就只在某特定平台(如Windows)下进行运行。,20,普通组件,AWT提供了一系列的普通组件以构建用户图形界面,它们主要包括:标签、文本框、文本域、按钮、复选框、单选框、列表框、下拉框、滚动条和

10、菜单等,21,标签,标签是很简单的一种组件,一般用来显示标识性的文本信息,常被放置于其他组件的旁边起提示作用。 AWT提供的标签类为Label,因此,可以通过创建Label对象来使用标签。,例11-9源程序,22,文本框,文本框是图形界面中常用于接收用户输入或程序输出的一种组件,它只允许输入或显示单行的文本信息,且用户还可以限定文本框的宽度。 AWT提供的文本框类为TextField,它直接继承于TextComponent,而TextComponent则从Component类继承而来。,23,关于TextField类的常用方法有: public String getText() /获取文本框中

11、的输入文本 public String getSelectedText()/获取文本框中选中的文本 public boolean isEditable() /返回文本框是否可输入 public void setEditable(boolean b) /设置文本框的状态:可输入或不可输入 public int getColumns() /获取文本框的宽度 public void setColumns(int columns) /设置文本框的宽度 public void setText(String t) /设置文本框中的文本为t,24,【例11-10】,25,文本域,文本域组件也是用来接收用户输

12、入或程序输出的,不过与文本框不同的是,它允许进行多行输入或输出,因而它一般用于处理大量文本的情形。 AWT提供的文本域组件为TextArea类,它也是从TextComponent类继承而来。,26,【例11-11】,27,按钮,AWT提供的按钮类为Button,它是从Component类直接继承而来。,28,复选框,复选框组件也是图形界面上用于接受用户输入的一种快捷方式,一般是在界面上提供多个复选框选项,用户根据实际情况,可以多选也可以都不选。 AWT提供的复选框类为Checkbox。 事实上,该组件类类似于具有开关选项的按钮,用户单击选中,再单击则取消选中。,29,【例11-12】,30,单

13、选框,在有些情况,程序界面可能给用户提供多个选项,但是只允许用户选中其中一个,这就是单选框的概念。 事实上,单选框是从上面复选框衍生而来的,它也采用Checkbox作为其组件类,不过为了实现单选效果,还需要另外一个组件类:CheckboxGroup,当我们把Checkbox类对象添加进某个CheckboxGroup对象后,它就成为了单选框。,31,【例11-13】,32,列表框,列表框组件看起来像文本域,可以有多行,每一行文本代表一个选项,文本域组件多用于用户编辑之用,而列表框多用于给用户几个选项进行选择,可以多选也可以单选。 AWT提供的列表框类为List,它直接继承于Component类,

14、,33,【例11-14】,34,下拉框,下拉框组件提供一些选项供用户来选择,每次只能选一个,选中的选项会被单独显示出来,而改变选项则可以通过单击组件边上的箭头,再从下拉框中进行选择来完成。下拉框相比列表框而言,占据较小的界面区域。 AWT提供的下拉框类为Choice,它直接继承于Component类,,35,【例11-15】,36,滚动条,滚动条是图形用户界面中常见的组件之一,它既可以用作取值器,也可以用来滚动显示某些较长文本信息。 AWT提供的滚动条类为Scrollbar,它也是直接从Component组件继承而来,,【例11-16】,37,菜单,菜单将系统的各种功能选项以直观的方式展现出来

15、,供用户选择,大大方便了用户与系统间的交互。 菜单相比其他组件类特殊,它是由几个菜单相关类共同构成的菜单系统。AWT提供的菜单系统类包括:MenuBar、MenuItem、Menu、CheckboxMenuItem以及PopupMenu,它们之间的继承关系如下图所示:,38,MenuBar类对应菜单系统的整体,Menu类对应菜单系统中的一列菜单(实际上它只是一种特殊的菜单项),MenuItem和CheckboxMenuItem类则对应具体的菜单项,其中CheckboxMenuItem为带复选框的菜单项,而PopupMenu类对应弹出式菜单,它是菜单Menu类的子类。,39,注意,由于各个类间存

16、在继承关系,因而子类可以调用父类提供的部分常用方法。 菜单系统创建好后,最后必须调用Frame类的setMenuBar()方法将其加入到框架界面中。,【例11-17】,40,事件处理,在早先的JDK1.0版本中提供的是称为层次事件模型的事件处理机制 。 在JDK1.1以后版本中便被基于事件监听模型的事件处理机制替代了,这种机制也称之为事件派遣机制或授权事件机制,它的处理效率相比层次事件模型大为提高 。,41,事件类及其对应的监听器,AWT提供了很多的事件类及其对应的监听器(其实就是接口),它们都被放置到JDK的java.awt.event包中 。,42,ActionEvent类,表示一个广义的

17、行为事件,可以是鼠标单击按钮或者菜单,也可以是列表框的某选项被双击或文本框中的回车行为。ActionEvent类对应的监听器为ActionListener接口,该接口只有一个抽象方法:public abstract void actionPerformed(ActionEvent actionevent); 注册该监听器需要调用组件的addActionListener()方法,撤销则调用组件的 removeActionListener()方法。,43,KeyEvent类,当用户按下或释放键时产生该类事件,也称为键盘事件。对应的监听器为KeyListener接口,该接口定义有三个抽象方法: pu

18、blic abstract void keyTyped(KeyEvent keyevent); public abstract void keyPressed(KeyEvent keyevent); public abstract void keyReleased(KeyEvent keyevent); 注册键盘监听器可以通过调用组件的addKeyListener()方法来实现。,44,MouseEvent类,当用户按下鼠标、释放鼠标或移动鼠标时会产生鼠标事件。该事件对应两种监听器:MouseListener和MouseMotionListener接口。鼠标按钮相关事件监听器由实现MouseL

19、istener接口的对象表示,而鼠标移动相关事件监听器则由实现MouseMotionListener接口的对象表示。MouseListener接口定义的抽象方法有5个:public abstract void mouseClicked(MouseEvent mouseevent);public abstract void mousePressed(MouseEvent mouseevent);public abstract void mouseReleased(MouseEvent mouseevent);public abstract void mouseEntered(MouseEvent

20、 mouseevent);public abstract void mouseExited(MouseEvent mouseevent);,45,MouseEvent类,MouseMotionListener接口定义的方法则有2个:public abstract void mouseDragged(MouseEvent mouseevent);public abstract void mouseMoved(MouseEvent mouseevent); 注册鼠标事件监听器可以调用相应的addMouseListener()和addMouseMotionListener()方法。,46,TextE

21、vent类,当一个文本框或文本域的内容发生改变时就会产生相应的TextEvent事件。该事件对应的监听器为TextListener接口,它仅定义了一个抽象方法: public abstract void textValueChanged(TextEvent textevent); 注册文本事件监听器必须调用组件的addTextListener()方法。,47,FocusEvent类,当一个组件得到或失去焦点时,就会发生焦点事件。在当前活动窗口中,有且只有一个组件拥有焦点,当用户用Tab键操作或用鼠标单击其他组件时,一般焦点就会转移至其他组件上,此时就发生了FocusEvent事件。该事件对应的

22、监听器为FocusListener接口,它有2个抽象方法:public abstract void focusGained(FocusEvent focusevent);public abstract void focusLost(FocusEvent focusevent); 注册焦点事件监听器需要调用组件的addFocusListener方法。,48,WindowEvent类,当一个窗口被打开、关闭、激活、撤消激活、图标化或撤消图标化时就会产生窗口事件。WindowEvent类对应的监听器为WindowListener接口,该接口定义了7个抽象方法: public abstract voi

23、d windowOpened(WindowEvent windowevent); public abstract void windowClosing(WindowEvent windowevent); public abstract void windowClosed(WindowEvent windowevent); public abstract void windowIconified(WindowEvent windowevent); public abstract void windowDeiconified(WindowEvent windowevent); public abs

24、tract void windowActivated(WindowEvent windowevent); public abstract void windowDeactivated(WindowEvent windowevent); 注册窗口事件监听器需要调用组件的addWindowListener()方法。,49,事件处理程序的编写步骤大致,(1)实现某一事件的监听器接口(定义事件处理类并实现监听器接口)。 (2)在事件处理类中根据实际需要实现相应的抽象方法。 (3)给组件注册相应事件监听器以指明该事件的事件源有哪些。,50,【例11-18】ActionEvent行为事件处理。,【例11-

25、19】菜单事件处理。,51,【例11-20】鼠标事件处理。,【例11-21】键盘事件处理。,52,Adapter(适配器),Java规定:实现一个接口时必须对该接口的所有抽象方法进行具体的实现,为此,Java提供了一种叫做Adapter(适配器)的抽象类来简化事件处理程序的编写。 适配器类很简单,它其实就是一个实现了接口中所有抽象方法的“空”类,本身不提供实际功能 Java为具有多个抽象方法的监听接口提供相对应的适配器类,比如WindowListener、 WindowStateListener和WindowFocusListener一起对应一个WindowAdapter、KeyListene

26、r对应KeyAdapter、MouseListener对应MouseAdapter等,大家不妨到java.awt.event包中看看 。,53,举例,/ 处理窗口关闭事件的常用方法(匿名适配器类)f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0); );上述代码很简洁,主要是因为我们采用了适配器类来实现简单的事件处理,由于这里只需要用到windowClosing()方法,因此只要给出它的覆盖实现即可,其他方法用户就可以不管了。,54,Swing组件集简介,A

27、WT组件的外观和显示直接依赖于本地系统,因此在移植程序时常会出现界面不一致的情形,为此,Sun公司在AWT的基础上又开发了一个经过仔细设计的、灵活而强大的新的GUI组件集Swing。 Swing组件集提供了比AWT更多、功能更强的组件,增加了新的布局管理方式(如BoxLayout),同时还设计出了更多的处理事件。,55,【例11-22】Swing编程示例一。,图11-28 测试Swing的普通按钮组件,56,【例11-23】Swing编程示例二。,图11-29 测试其他Swing按钮组件,57,【例11-24】Swing编程示例三。,图11-30 主框架窗口,图11-31 子框架窗口,58,小结,图形用户界面技术的概念和历史 用户界面设计原则 Java AWT组件集、事件处理机制 Sun在AWT之后推出的新组件集Swing,59,作业,2 8 10,

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

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报