Java程序设计 教学课件 作者 焦玲 第6章 图形用户界面GUI-大学课件-_第1页
Java程序设计 教学课件 作者 焦玲 第6章 图形用户界面GUI-大学课件-_第2页
Java程序设计 教学课件 作者 焦玲 第6章 图形用户界面GUI-大学课件-_第3页
Java程序设计 教学课件 作者 焦玲 第6章 图形用户界面GUI-大学课件-_第4页
Java程序设计 教学课件 作者 焦玲 第6章 图形用户界面GUI-大学课件-_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章图形用户界面GUI本章重点❏

学习使用AWT组件和Swing组件来处理图形界面的设计;❏

掌握使用常用的4种布局管理器摆放各种组件;❏

使用空布局管理器可以使编成人员自由组织组件;❏

掌握事件处理的过程;❏

掌握Swing中的各种容器的使用。6.1图形用户界面概述

在Java出现以前,各家的操作平台像Mac、Windows、

Linux、Unix、Solaris、OS2等各有其特有的图形用户接口,它们共同的问题是,在一种平台上写出来的程序不能应用到其它的平台上。

然而到了Java出现后便有了很大的改观。在Java语言中,使用AWT组件和Swing组件来处理图形界面的设计。

现今的程序开发者看待图形界面的设计与程序设计是同等重要的。

图形用户界面(Graphical

User

Interface)简称GUI,是指用于用户和程序之间进行交互的界面。用户通过操作界面上的菜单、按钮、标签等组件和鼠标共同完成对计算机发出指令、启动应用程序等操作任务。6.2熟悉AWT

Java初期乃是借助一种抽象窗口工具集AWT(Abstract

Windows

Toolkit)来完成界面的设计。AWT提供了很多的类来支持GUI的设计。AWT提供了基本的用户接口组件,如label(标签),button(按钮),menu(菜单),lists(列表)等。另外它也提供事件处理机制。

在进行GUI的设计时,必须通过import语句引入

java.awt包中的相关的类。

另外,需要注意的是:java坐标系是一个二维网。原点为屏幕的左上角(0,0),X坐标为从左向右移动的水平距离。Y坐标为从上向下移动的垂直距离。如图7-2所示。0,0X坐标轴Y坐标轴图6-2

Java坐标系6.2.1组件、容器

一个Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并且与用户进行交互的对象,例如,一个按钮、一个标签等。组件不能独立的显示出来,必须将组件放在一定的容器中才可以显示出来。

容器(container)实际上是Component的子类,如图7-1所示,容器本身也是一种组件,具有组件的所有性质,另外它还具有容纳其他组件和容器的功能。要构造一个GUI,必须使用容器,否则界面就无法显示出来,在java.awt包中,常用的容器有:Frame、Panel、Applet。1、常用容器之一:框架(Frame)

Frame类是Window类的子类,如图7-1所示,它也是窗口的一种,Frame包括标题,而且可以调整此窗口的大小。

Frame类的构造方法为:Frame(Stringstr),需要注意的是:一个Frame刚刚被创建的时候,起初始大小为(0,0),而且是不可见的,所以为了使Frame显示出来,必须

指明它的大小。

创建框架(窗口)的基本和必要操作包括以下几步:❏

设置窗口的大小。❏

给窗口一个标题。❏

在屏幕的某一个位置显示窗口。❏

显示窗口。❏

关闭窗口。【例6.1】Frame举例打开源文件图6-3

Frame窗口的显示窗口标题

【例6.2】改变Frame的最小化图标举例:修改程序例6.1打开源文件改变之后的窗口图标图6-4改变Frame的图标2、常用容器之二:面板(Panel)

面板(Panel)与Frame一样都是容器,可以将组件或其他面板添加到其中。Panel可以使用构造方法Panel()生成。

当一个Panel对象创建之后,必须被放入到

Window和Frame中,这样才可见。

使用add()方法可以将其他组件添加到此容器中,也可以将Panel添加到其他容器中。【例6.3】Panel举例:打开源文件图6

-

5

Panel

举例3、常用容器之三:Window

Window、Frame以及Dialog(对话框)是相当类似的东西。就层级结构来看,Window是Frame及Dialog的超类。如图6-1所示。这也就是说Frame及Dialog也是一种Window。

Window没有边框(border),没有标题列(titlebar),没有菜单列(menubar),也不能缩放大小,而且必须以一个Frame或Dialog作其拥有者。

Window最适合用来展示需要浮在其它组件之上的无边矩形区域。而Frame则有边框,而且可以设置标题(title)以及上面也可放菜单,而且可调整大小。Frame最合适用于一个application需要有菜单的窗口。

Dialog有边框,可以设置标题,也可以调整大小,很像

Frame。但与Frame最大的不同的是Dialog不能放置菜单。

【例6.4】Window、Frame举例:打开源文件图6-6

Window、Frame、Dialog6.2.2

版面布局管理器

在Java语言中提供了布局管理器这样的工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。

容器中的组件位置由布局管理器决定。每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。

Java语言中包含了几种常见的布局管理器,如:❏

FlowLayout❏

BorderLayout❏

GridLayout❏

CardLayout❏

GridBagLayout每一个容器都有一个默认的布局管理器,如表6-2所示。1、FlowLayout布局管理器❏

FlowLayout的排版方式,就像流程或文本处理器在处理一段文字一样,它将组件一排一排的依次放置。常用于RadioButton(单选按钮)或CheckBox(复选框)等组件的排列。

容器中的各个组件在FlowLayout布局管理器中,缺省为居中放置,但我们可以设置组件的左对齐、右对齐。如:❏

setLayout(new

FlowLayout(FlowLayout.RIGHT,20,40));右对齐,组件之间水平间距20个像素,竖直间距40个像素。❏

setLayout(new

FlowLayout(FlowLayout.LEFT));左对齐,组件之间水平间距和竖直间距缺省为:5

【例6.5】FlowLayout布局管理器举例:打开源文件图6-7采用FlowLayout布局的组件2、BorderLayout布局管理器BorderLayout布局管理器将版面分为北(North),东(East),南(South),西(West),中(Center)5个区域。我么可

以使用add()方法将相关组件添加到所指定的

5个区域。

【例6.6】BorderLayout布局管理器举例:打

开源文件

上述程序是一个Applet程序,所以还需要编制一个HTML文件。图6-8采用BorderLayout布局的组件

如果若干区域没有被设置,那么将会有什么样的显示效果?图6-9显示了在BorderLayout布局管理器中,北边区域、中间区域以及北边、中间、南边区域没有被设置的情况。图6-9相关区域被省略的情况图3、GridLayout布局管理器

GridLayout的布局管理格式是将版面分割成行数(

rows

)×列数(

columns

)的格子状版面,然后组件按照由左至右,由上而下的次序排列。

【例6.7】GridLayout布局管理器举例:打

开源文件图6-10采GridLayout布局的组件4、CardLayout布局管理器

CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间。就像数据卡片一般,一次只能显示一个容器组件的内容。用next(),previous(),last(),first()来达到前后数据卡片的控制。

【例6.8】CardLayout布局管理器举例:打

开源文件图6-11

CardLayout布局格式5、null布局管理器

Null管理器就是近似(x,y)坐标的一种布置管理器。

不过请不要高兴的太早,这种布置管理器是有缺点的,因为它不能妥善的处理resize事件。所以,这种管理器不适合大量运用,只能偶尔的用在比如随机random()产生(x,y)对象位置的视觉效果上。【例6.9】null布局管理器举例:打开源文件图6-12

null布局管理器的组件设置6.2.3

AWT事件处理机制

因为在Java程序设计过程中,设计和实现用户界面的过程主要分为两个步骤:❏第一:创建窗口,并且在窗口中添加组件。❏第二:给相应的组件添加事件处理,从而实现图形用户界面与用户之间的交互。这种交互就是通过AWT的事件处理机制来实现的。1、事件处理机制❏第一:什么是事件,事件就是指发生在用户界面上的用户交互行为所产生的一种效果。比如,按下一个按钮就会弹出一个对话框,鼠标单击“退出”菜单项就会退出应用程序窗口等。❏第二:什么是事件源?我们将产生事件的这些对象,如AWT组件称之为事件源。如按钮、Frame窗口等。❏

第三:什么是事件处理者?事件处理者就是指接收事件对象并对其进行处理的方法。

总的来说,Java的事件处理是采用委托事件模式。所谓的委托事件模式,是指由事件源产生事件,委托给一个或多个事件监听者来监听事件发生的通知,当监听者监听到事件发生的通知时,监听者根据事件产生的类型将其转交给事件处理者(即方法)来处理事件。产生Action

event(Action事件)按钮(事件源)Action

Handler:(事件处理者)actionPerformed(ActionEvent)注册事件监听图6-13事件处理过程2、事件处理的操作过程❏在Java语言中,java.awt.event包中定义了各中事件类、事件监听接口、以及事件转接器(Adapter

)。我们需要通过包中的这些类及其接口进行程序设计。❏【例6.10】按钮的事件处理过程举例:打开源文件图6-14事件处理举例

当按下按钮时,就会在命令行下输出信息:

Action

occurred。❏从上述例题我们可以看出:编写程序的时候,事件处理的流程需要经过如下几个步骤:实现事件接口:❏对于某种类型的事件XXXEvent,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现针对特定事件的特定接口XXXListener;注册事件监听器:❏

事件源产生事件后,必须注册相应于该类事件的监听器,使用addXXXListener(XXXListener)方法来注册监听器。如例题6-10中,给按钮b注册事件监听器,b.addActionListener(this);事件处理方法:❏

最后在相应的方法中实现特定的事件。如例题6-10中,在方法actionPerformed()进行相应事件的处理。

在Java语言中,AWT事件共有10类,我们可以将这10类事件归为两大类:低级事件和高级事件。❏

低级事件:ComponentEvent(组件事件:用于组件尺寸的变化,移动)ContainerEvent(容器事件:用于组件增加,移动)WindowEvent(窗口事件:用于关闭窗口,窗口闭合,图标化)FocusEvent(焦点事件:用于焦点的获得和丢失)KeyEvent(键盘事件:用于键按下、释放)MouseEvent(鼠标事件:用于鼠标单击,移动)❏

高级事件:

ActionEvent(动作事件:用于按钮按下,TextField中按

Enter键)

AdjustmentEvent(调节事件:用于在滚动条上移动滑块以调节数值)

ItemEvent(项目事件:用于选择项目,不选择“项目改变”)TextEvent(文本事件,用于文本对象改变)

ActionEvent事件(主要用于按下按钮或者文本框回车时)❏实现的接口为:ActionListener。❏给按钮注册事件监听器:b.addActionListener(this);❏事件处理的方法为:actionPerformed(ActionEvent

e)。

【例6.11】ActionEvent事件处理举例:打

开源文件图6-15加减乘除运算WindowEvent事件----窗口事件❏实现的接口:WindowListener❏——事件处理的方法:有7个方法windowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)—图标化windowDeiconified(WindowEvent)—非图标化windowClosed(WindowEvent)—关闭之后要做的处理windowActivated(WindowEvent)—激活windowDeactivated(WindowEvent)—非激活

【例6.12】WindowEvent事件举例:修改例6.11,通过程序将Frame的窗口关闭,为此,我们需要实现WindowEvent事件接口打开源文件【程序解析】❏

从此例中我们可以看出,实现了某一个事件的接口之后,必须将此接口中的所有方法在类中实现。如此例中实现了接口implements

WindowListener之后,在此接口中的所有方法(7个方法)如上所述,虽然其中只有

windowClosing()的方法中有语句,其他方法没有具体的实现内容,但是仍然需要写在程序代码中。否则编译就会出现错误。MouseEvent—鼠标事件——实现的接口:MouseMotionListener——事件处理的方法:mouseDragged(MouseEvent)—鼠标拖动mouseMoved(MouseEvent)—鼠标移动——实现的接口:MouseListener——事件处理的方法:❏

mousePressed(MouseEvent)—鼠标按下❏

mouseReleased(MouseEvent)—鼠标释放时❏

mouseEntered(MouseEvent)---鼠标进入某个区域时❏

mouseExited(MouseEvent)---鼠标离开某个区域时❏

mouseClicked(MouseEvent)—鼠标单击时【例6.13】鼠标事件举例:打开源文件鼠标离开区域时时鼠标进入区域时拖动鼠标时图6-16鼠标事件处理举例3、事件适配器

如果我们需要实现某一事件监听接口时,必须将其所有的成员方法全部重新写出来,不论这些方法有没有用到。这样对于有多个方法的接口,使用的时候是非常的麻烦。

因此,Java为了体恤我们的辛劳,便将有多个成员方法的接口,另外再定义一种相对应的类来简化程序撰写。这个类就是事件适配器(Adapter)。【例6.14】事件适配器举例:

修改例题6.12,我们采用事件适配器来实现窗口事件。(Example12.java)❏只保留:public

void

windowClosing(WindowEvent

e){■System.exit(0);//关闭窗口}❏我们可以看出,运行结果是一样的,但是却方便了程序的书写,提高了编程效率。6.3

Swing了解6.3.1

Swing与AWT的区别

awt包,它是一个强大的工具集,但是使用

awt包编写出来的程序有可能在不同的操作平台上显示不同的效果,这是很让程序员头痛的事情。

为了解决这个问题,Java2以后,AWT的组件就被另一组更强韧、多用途、更富弹性的组件类库——Swing所取代。

【例6.15】AWT组件与Swing组件的区别举例:打开源文件【程序解析】❏Swing组件是画出来的,而且当Swing组件与AWT组件重叠的时候,AWT组件会覆盖住Swing组件,另外,AWT组件会消耗更多的资源,而且在跨平台上会有问题产生。图6-17

swing与awt的区别

不过要学习如何使用Swing之前,仍然需要从了解AWT开始,因为Swing是架构在AWT的基础上。我们需要先了解AWT的构思与运作方式后,才能从容的运用Swing的强大的功能。

在java.Swing包中提供了超过250个的类,而其中接近50个类用大写字母“J”开头的。比如像前面看到的例子,JButton、JLabel,JTextField等,都是Swing包中的类。6.3.2

顶层容器❏

在Swing包中,包含了4个顶层容器,它们分别为:

JWindow、JFrame、JDialog、JApplet。❏

作为顶层容器都含有一个默认的隐藏的contentPane容器,它可供GUI组件(如JButton,但menubar除外)放入其中。//创建一个窗口JFrameJFrame

f=new

JFrame();//生成一个按钮JButtonJButton

jButton1=new

JButton();//将按钮添加到容器JFrame中f.

getContentPane().add(jButton1);❏

由此,我们可以得知,这与AWT包中的Frame直接使用

add()方法添加组件是不同的。1、JWindow❏

JWindow基本上与AWT包中Window差不多,都没有边框、没有标题栏、没有菜单栏,也不能缩放大小。请参考第6章的6.2.1中的常用容器之三----Window部分。2、JFrame❏

JFrame是写Application必须使用的顶层组件。JFrame与Frame的不同,最显明的一点就是当你去关掉它时,JFrame会正常地被关掉,而不像Frame需要特别处理才能被关掉。

【例6.16】JFrame举例:打开源文件【程序解析】❏当试图关闭图中的窗口时,窗口会被正常关闭。试比较两个例子中的窗口的不同以及按钮的不同。图6-19

JFrame窗口3、JDialog❏JDialog则需依附在其他Dialog或Frame上才能显示出来。❏JDialog的构造方法如下:❏

JDialog(Dialog

owner,

boolean

modal)❏

JDialog(Frame

owner,

String

title,

boolean

modal)❏需要注意的是:

JDialog没有内建的OK、Cancel等按钮,而需另外自行加上去。这是使用JDialog较不方便的地方。而在后面讲述的JOptionPane中则提供带有不同按钮的对话窗口,使用起来就比较方便。【例6.17】JDialog举例:打开源文件图6-20

JFrame和JDialog6.3.3

其他容器1、JOptionPane❏我们现在可以采用JOptionPane容器,它提供了多样化的选择对话框以及各种各样的样式,它比JDialog功能更强大,而且对话框的样式更美观大方。其典型的界面我们可以在后面的例中看到。

【例6.18】JOptionPane举例1:打开源文件图6-21消息框

【例6.19】JOptionPane举例2:打开源文件图6-22错误信息框

【例6.20】JOptionPane举例3:打开源文件图6-23输入对话框2、JMenuBar、JMenu、JMenuItem❏JMenuBar(菜单栏)是在窗口下的菜单。这种菜单可以放在所有实现RootPaneContainer的容器里。❏而菜单栏里面可有多个菜单(JMenu),菜单中有菜单选项(JMenuItem)。❏菜单选项之间有分隔线(Seperator)。菜单选项也可加入图标,菜单选项即可以是单选菜单项,也可以是复选菜单项。

【例6.21】菜单栏、菜单、菜单选项举例:打开源文件图6-24菜单栏、菜单、菜单选项、分隔线、图标6.3.4基本组件1、JButton❏Swing的JButton比AWT的Button功能更多样化,不但能加入文字、图形,而且也能设置底色,动态效果等。❏【例6.22】给按钮加上图标举例:打开源文件图6-26按钮上添加图标

【例6.23】动态效果的按钮举例:打开源文件图6-27带有动态效果的按钮2、JRadioButton、JCheckBox❏JRadioButton就是所谓的单选按钮,我们需要注意的是,在编写程序的时候,单选按纽需要配合ButtonGroup,来使一群JRadioButton只能有单一选择。❏【例6.24】单选按钮举例:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论