您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 87第7 章 Java 中的GUI 编程
第7章Java中的GUI编程图形用户界面(GraphicalUserInterface,GUI)使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发送指令,启动操作,并将系统运行的结果同样以图形方式显示给用户。图形用户界面操作简单,省去了字符界面用户必须记忆各种命令的麻烦,深受广大用户的喜爱和欢迎。所以学习设计和开发图形用户界面,是应用软件开发人员的必修课。本章主要介绍Swing和AWT中基本组件的用法,如何创建简单的用户界面,包括布局管理、用户事件,以及如何创建复杂的用户界面等。图形用户界面概述创建简单的用户界面布局管理用户界面创建复杂的用户界面7.1图形用户界面概述GUI由若干GUI组件(Component)组成,GUI组件是可见的对象,用户可以通过鼠标或键盘对它进行操作,通过对不同事件的响应,来完成组件与用户之间或组件与组件之间的交互。用户界面设计在程序设计中有较大的比重,在较为复杂的Java应用程序中,用户界面设计是不可缺少的。Java-AWT——抽象窗口工具箱就是专门是了解和掌握UI的各主要构件以及布局管理器。Java基类(JavaFoundationClasses,JFC)是关于GUI组件和服务的完整集合,它大大简化了健壮的Java应用程序的开发和布署。JFC作为Java2SDK的一个组成部分,主要由5个API构成:AWT、Swing、Java2D、DragandDrop、Accessibility,如图7.1所示。AWT组件库为各类Java应用程序提供了多种GUI工具。Swing提供了一整套用Java语言编写的GUI组件,以保证可移植性。Java2D是一种图形API,它为Java应用程序提供了高级的二维(2D)图形图像处理类的集合。同时,该API还包含了一套扩展字体集合。DragandDrop技术提供了Java和本地应用程序之间的互用性,用来在Java应用程序和不支持Java技术的应用程序之间交换数据。AccessibilityAPI提供了一套高级工具,可以辅助开发使用非传Java语言程序设计110统输入和输出方式的应用程序,它提供了一个辅助技术接口,如:屏幕阅读器、屏幕放大器、听觉文本阅读器(语音处理)等。图7.1JFC的组成Java早期进行图形用户界面(GraphicsUserInterface,GUI)设计时,使用Java.awt包中提供的类,比如Button(按钮)、TextField(文本框)等组件类,“AWT”就是AbstractWindowingToolkit(抽象窗口工具包)的缩写。Java2(JDK1.2)增加了一个新的javax.swing包,该包提供了功能更为强大的用来设计GUI界面的类。Java早期的java.awt包中的类创建的组件习惯上称作重量组件,例如,当用java.awt包中的Button类创建一个按钮组件时,都有一个相应的本地组件(native)在为它工作(称为它的同位体)。所谓本地组件是指非Java语言编写的组件。AWT组件的设计原理是把与显示组件有关的许多工作和处理组件事件的工作交给相应的本地组件。因此把有同位体的组件称为重量组件,基于重量组件的GUI设计有很多不足之处。比如程序的外观在不同的平台上可能有所不同,而且重量组件的类型也不能满足GUI设计的需要,例如,不能把一幅图像添加到AWT按钮上或AWT标签上,因为AWT按钮或标签外观绘制是由本地的同位体来完成的,而同位体可能是用C++编写的,它的行为是不能被Java扩展的。另外,使用AWT进行GUI设计可能会消耗大量的系统资源。javax.swing包提供了更加丰富的、功能强大的组件,称为Swing组件,其中大部分组件是轻量组件,没有同位体。Swing组件的轻组件在设计上和AWT完全不同,轻组件把与显示组件有关的许多工作和处理组件事件的工作交给相应的UI代表来完成,这些UI代表是用Java语言编写的类,这些类被增加到Java的运行环境中,因此组件的外观不依赖平台,不仅在不同平台上的外观是相同的,而且较重量组件而言有更高的性能。Swing采用了一种MVC的设计方式,即模型-视图-控制(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。MVC是现有的编程语言中制作图形用户界面的一种通用的思想,其思路是把数据的内容本身和显示方式分离开,这样就使得数据的显示更加灵活多样。比如,某年级各个班级的学生人数是数据,则显示方式是多种多样的,可以采用柱状图显示,也可以采用饼图显示和采用直接的数据输出。因此在设计的时候,就考虑把数据和显示方式分开,对于实现多种多样的显示是非常有帮助的。第7章Java中的GUI编程111Swing胜过AWT的主要优势在于MVC体系结构的普遍使用。在一个MVC用户界面中,存在三个通讯对象:模型、视图和控件。模型是指定的逻辑表示法,视图是模型的可视化表示法,而控件则指定了如何处理用户输入。当模型发生改变时,它会通知所有依赖它的视图,视图使用控件指定其相应机制。javax.swing包中JComponent(轻组件)类是java.awt包中Container类的一个直接子类、Component类的一个间接子类。javax.swing包中的JFame类和JDialog类分别是java.awt包中Frame类和Dialog类的直接子类、Window类的间接子类(如图7.2所示)。图7.2JComponent类的部分子类以及JFrame类和JDialog类在学习GUI编程时,必须很好地理解掌握两个概念:容器类(Container)和组件类(Component)。Java把由Component类的子类或间接子类创建的对象称为一个组件。Java把由Container的子类或间接子类创建的对象称为一个容器。可以向容器添加组件。Container类提供了一个public方法:add(),一个容器可以调用这个方法将组件添加到该容器中。容器调用removeAll()方法可以移掉容器中的全部组件;调用remove(Componentc)方法可以移掉容器中参数指定的组件。每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。javax.swing包中有4个最重要的类:JApplet、JFrame、JDialog和JComponent。JComponent类的子类都是轻组件,JComponent类是java.awt包中Container类的子类,因此所有的轻组件也都是轻容器。JFrame、JApplet、JDialog都是重组件,即有同位体的组件。窗口(JFrame)、对话框(JDialog)、小应用程序(JApplet)可以和操作系统交互信息,轻组件必须在这些重量容器中绘制自己,习惯上称这些容器为swing的底层容器。下面简单介绍一下AWT和Swing。1.AWTAWT(AbstractWindowingToolkit)是一个独立平台的窗口工具组件集,它依赖于对等组件(Peer),而对等组件是一个本地GUI组件,由AWT类管理。AWT的作用是给用户提供基本的界面组件,如按钮、列表框、菜单等。Java语言程序设计112AWT组件中,包含与其对等组件的大量实用操作。例如使用AWT创建了一个Menu类的实例,那么Java运行时系统将创建一个菜单对等组件的实例,而由创建的对等组件实际执行菜单的显示与管理。在创建菜单实例时,SolarisJDK将产生一个Motif菜单对等组件,而WindowsJDK将产生一个Window菜单对等组件等。这样,对等组件保护着每个平台的本地外观和感觉(LookandFeel),但是可以在移植时改变它们的大小和位置,因为它们在不同的平台可能会有不同的大小,也许还有不同的行为。而AWT类仅是对等组件外围的包装与操作工具,因此,对等组件可以快速产生一个GUI工具组件。AWT最初只包括与本地对等组件相关联的组件,称为重量组件(HeavyweightComponent),这些组件在自己的本地不透明窗口中绘制,在改变其默认行为时,不可以为其扩展子类,此外,它们必须是矩形的,且不能有透明背景。因此,在AWT1.1版本中引入了轻量组件(LightweightComponent)的概念。轻量组件没有本地对等组件,它不在本地不透明窗口中绘制,而是在它们的重量容器窗口中绘制,它们直接扩展了java.awt.Component类或java.awt.Container类。轻量组件不会损失与它们关联的不透明窗口的性能,它们可以有透明的背景及非矩形的外观,但在轻量组件的容器中必须有一个是重量组件,否则无法在窗口内绘制轻量组件。我们将在本章对AWT软件包中的常用组件进行详细讲解。常用组件(AWT)用于创建GUI组件的类包含在java.awt软件包中,可以通过下面的语句来引入java.awt软件包中的类:importjava.awt.*;图7.3(a)列出了java.awt中的各个类,图7.3(b)列出AWT常用图形组件类的继承关系。(a)java.awt中的各个类图7.3第7章Java中的GUI编程113(b)AWT常用图形组件类的继承关系图7.3(续图)2.SwingSwing是建立在AWT基础之上的,用来代替AWT中的重量组件,而不是用来替代AWT本身。它利用了AWT的底层组件,包括图形、颜色、字体、工具包和布局管理器等。它使用AWT最好的部分来建立一个新的轻量组件集,而丢弃了AWT中有问题的重量组件部分。Swing支持可插接观感(PluggableLook-and-Feel),可插接的观感可使开发人员构建这样的应用程序:这些应用程序可在任何平台上执行,就好像是专门为那个特定平台而开发的一样。在MicrosoftWindows环境中执行的程序似乎是专为这个环境而开发的;而同样的程序在UNIX平台上执行,其行为又似乎是专为UNIX环境开发的。通过引入新特性和丰富的功能,Swing提供了比AWT更全面的组件集合。SwingAPI是围绕实现AWT各个部分的API构建的,这保证了所有早期的AWT组件仍然可以使用。7.2创建简单用户界面7.2.1框架与窗口框架(Frame)是带标题的顶层层窗口。从类的层次上来看,它属于Container类。所以,在每个Frame中都可以设置版面,缺省设置是BorderLayout。Frame类的构造方法有两种,如表7-1所示。Java语言程序设计114表7-1java.awt.Frame的构造函数与方法(Method)构造函数主要功能Frame()创建框架Frame(Stringtitle)创建框架,并以title为默认的标题Method主要功能ImagegetIconImage()返回窗口最小化时的图标voidsetIconImage(Imageimg)设置窗口最小化时的图标为imgintgetState()返回窗口的状态,Frame.Normal代表一般状态,Frame.ICONIFIED代表窗口为最小化MenuBargetMenuBar()返回窗口使用的菜单对象voidsetMwnuBar(MenuBarmb)设置窗口使用的菜单对象为mbvoidremove(MenuCompoentmb)删除窗口的菜单对象mbStringgetTitle()取得窗口的标题StringsetTitle(Stringtitle)设置窗口的标题为titlebooleanisResizable()返回窗口是否可改变大小voidsetResizable()设置窗口是否允许改变大小需要说明的是,用这两种方法创建的窗口都是非可视窗口,只有作用Frame类的父类Windows类中的show方法后,才能在屏幕上显示出来。设置窗口的大小可以使用resize方法。javax.swing包中的JFrame类是jav
本文标题:87第7 章 Java 中的GUI 编程
链接地址:https://www.777doc.com/doc-5984291 .html