您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > Java面向对象程序设计(第二版)第11章_编写图形用户界面程序
Java面向对象程序设计(第二版)主编赵生慧中国水利水电出版社第11章编写图形用户界面程序教学内容图形用户界面概述AWT和Swing比较颜色、字体和图形Swing容器和组件使用Swing的基本组件布局管理器事件驱动设计教学目标掌握使用Swing编写图形用户界面程序的基本方法准确描述Swing中常用组件的作用及主要方法的功能熟悉应用Swing的基本组件设计图形用户界面通过布局管理器设计窗口布局理解Java的事件处理机制,编写事件驱动程序11.1GUI概述图形用户界面(GUI,GraphicsUserInterface)是软件产品与用户交互的接口,是软件产品中用户可以看到并直接操作的部分。如图11-1所示,Java语言集成开发工具JCreator提供了良好的用户界面,使用户编写Java程序变得简单。用户通过图形界面向计算机系统发布命令、控制操作,系统的结果也以图形界面方式显示给用户。图11-1JCreator的GUI在Java中,AWT(AbstractWindowingTookit,抽象窗口工具包)是用来处理图形最基本的方式,它可以用来创建Java的applet及窗口程序。AWT是Java早期的技术,提供的组件有限,无法满足应用程序组件多样化的要求。为了弥补这个不足,Sun公司开发出Swing包,它有别于AWT,不依赖于特定的系统平台,对外提供多样化的组件及外观,并且保持外观风格的一致。11.1GUI概述(续)11.1.1GUI组成元素分类在Java中,GUI组成元素都放在java.awt和javax.Swing包内,它们都包含了大量的类。构成图形用户界面的各种元素和成份可以粗略地分为三类:容器(container)、组件(components)和用户自定义成份。1.容器容器是用来组织或容纳其他界面成份和元素的组件。Java提供了相应的容器类,例如,框架(JFrame/Frame)、面板(JPanel/Panel)及滚动面板(JScrollPanel/ScrollPanel)等类。2.组件与容器不同,组件是图形用户界面的基本单位,里面不再包含其他成份。组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。3.用户自定义成份除了上述的标准图形界面元素外,编程人员还可以根据用户的需要,使用各种字型字体和颜色设计一些几何图形、标志图案等,它们被称作用户自定义成份。用户自定义成份通常只起到显示结果、装饰美化的作用,不能响应用户的动作,不具有交互功能。11.1.1GUI组成元素分类(续)11.1.2AWT和Swing介绍Sun公司提供了两个图形工具类包AWT和Swing,负责构建GUI界面。AWT是将本地化的工具组件进行简单抽象而形成的。用AWT创建组件和进行事件处理时,都是直接由相应组件进行自身绘制并对事件作出响应。由于AWT的这个特征,这些组件被称为重量级组件,AWT被称为重量级的图形工具。考虑到跨平台的原因,AWT只提供了各个平台都支持的、构建GUI必需的一些基本组件。因此AWT包小而简单。由于AWT直接调用本地图形构件来实现图形界面,使得用AWT构件的GUI往往在不同的操作系统平台上具有不同的风格,而且GUI的性能也受到了限制。这影响了Java程序的跨平台性。Swing不但重写了AWT中的组件,还为这些组件增添了新的功能,提供了许多AWT没有的、创建复杂图形用户界面的组件,增强了GUI与Java程序的交互功能。Swing提供的可插入式的观感能让用户创建出跨平台的GUI。Swing和AWT部分组件的继承关系和层次关系如图11-2所示。11.1.2AWT和Swing介绍(续)java.awt.Componentjava.awt.Containerjava.awt.Windowjava.awt.Framejava.awt.Dialogjava.awt.Paneljava.awt.Buttonjava.awt.Labeljava.awt.Listjavax.swing.JComponentjavax.swing.JWindowjavax.swing.JFramejavax.swing.JDialogjavax.swing.JPaneljavax.swing.JButtonjavax.swing.JLabeljavax.swing.JListjava.applet.Appletjava.swing.JApplet图11-2Swing和AWT部分组件的继承和层次关系11.1.2AWT和Swing介绍(续)11.1.3颜色、字体和图形在进行用户界面设计时,经常会用到Color类、Font类和Graphics类,分别用来设置颜色、字体和图形,这三个类属于java.awt包,同样可以在创建Swing界面时使用。1.Color类Color类用于封装默认sRGB颜色空间中的颜色,或者用于封装由ColorSpace标识的任意颜色空间中的颜色。Color类中已经创建了一些常见的颜色对象,包括BLACK、BLUE、CYAN、GRAY、GREEN、MAGENTA、ORANGE、PINK、RED、WHITE等,这些颜色对象可以直接使用。当然,也可以通过Color类的构造方法来创建颜色。表11-1列出了Color类的构造方法。11.1.3颜色、字体和图形(续)比如,要使用一个红色对象,下面几种方法都可以实现:Color.redColor.REDnewColor(255,0,0)newColor(1.0,0.0,0.0)11.1.3颜色、字体和图形(续)2.Font类Font类是用来规范组件所用文字的字体、大小和样式等。Font类提供了一个构造方法Font(),一个设置字体的成员方法setFont(),以及若干个获取字体有关信息的成员方法。要设置一个字体,可以使用Font()构造方法实现:Font(Stringfontname,intstyle,intsize)其中,fontname为字体名,如宋体、黑体、楷体、Arial、Courier、TimesRoman、Helvetica等;style为字体样式,如粗体(BOLD)、斜体(ITALIC)、正常体(PLAIN);size为用像素点表示的字体大小。11.1.3颜色、字体和图形(续)3.Graphics类Graphics类是所有图形上下文的抽象基类,允许应用程序在组件上进行图形绘制。由于不能直接创建对象,一般通过以下两种方法获得该对象:调用paint()或update()方法,系统自动获取当前界面的Graphics对象作为参数传递给GUI程序;调用Component类的getGraphics()方法。比如,想在窗口中绘制一个矩形,下面的语句就可以实现。Graphicsg=frame.getGraphics();g.drawRect(30,60,140,40);11.1.3颜色、字体和图形(续)第一条语句是取得窗口的绘图区,第二条语句是绘制长方形。但是,当用其他窗口覆盖这个窗口,或者将窗口最小化时,绘制出来的图形也会随之覆盖或者消失。为了避免这种情况,AWT提供了一个自发性的paint()方法。paint()方法在下列情况发生时,会自动运行:1.当新建的窗口显示在显示器上,或从隐藏变成显示时;2.从缩小图标还原之后;3.正在改变窗口的大小时。11.1.3颜色、字体和图形(续)paint()方法的格式是:publicvoidpaint(Graphicsg)可以将Graphics对象传给paint()方法,这样一来,编写在paint()里面的程序代码便可在绘图区内绘制图形了。上面的绘图代码就可以进行改写,将绘制矩形的代码放在paint()方法里面,程序通过调用paint()进行绘图。Graphicsg=frame.getGraphics();paint(g);g.drawRect(30,60,140,40);第二条语句是调用paint()方法在指定的组件上进行绘图,第三条语句应写在paint()方法内,绘制长方形。11.1.3颜色、字体和图形(续)例11.1AWT绘图示例程序运行如图11-3所示。paint()方法在窗口创建的时候就可以自动运行,首先设置了颜色和字体,利用设置好的条件在获取的绘图区域绘制了一个矩形,并且绘制了一串文字。Graphics类是从java.lang.Object类派生而来,定义了很多绘制图形的方法。这些方法与Color类和Font类结合,就能绘制出不同颜色的图形以及在图形中绘制各种文字符号。图11-3AWT的绘图例11.1AWT绘图示例(续)类Graphics的常用方法类Graphics的常用方法(续)注意,上面的所有方法只要涉及到坐标,均是以窗口的左上角为原点,向右为正x方向,向下为正y方法。11.1.4使用AWT创建图形用户界面使用AWT构建一个图形用户界面的基本步骤一般包括以下几步:创建容器组件(如Frame、Panel等),在容器中添加需要的其他组件(如Button、Label、TextField和Checkbox等)。创建布局管理器,用来自动设置容器中组件的位置和大小。使用委派事件模型来响应用户操作,实现用户和程序的交互。AWT中各种基本组件类如表11-3所示。AWT基本组件AWT创建图形用户界面示例例11.2显示一个数字验证窗口,并通过信息显示是否输入正确。AWT创建图形用户界面示例(续)运行结果如图11-4所示。图11-4AWT窗口示例程序程序分析:这个例子中,在类Jpro11_2里面定义一个Frame窗口对象,该容器同时也实现了事件监听器功能。在该窗口类中定义了五个静态的对象,分别是两个Label标签对象:tip和result,tip起到提示操作的功能,result显示操作的结果;两个TextField文本框对象:sys和user,sys显示了系统自动产生的数字,user供用户输入信息;还有一个Button按钮对象submit,供用户输入后提交答案;这些均是AWT基本组件。setBounds()、setVisible()等方法用来改变窗口对象的状态,具体见下节。add()方法通常用于将一些基本组件加入到容器里面。本程序还涉及到了布局管理和事件驱动设计,AWT和Swing在这两部分基本是相同的,这两部分内容在本章后面将详细说明。AWT创建图形用户界面示例(续)11.2Swing容器Swing工具包中提供了三类容器组件,分别是:1.顶层容器:JFrame、JDialog、JApplet、Jdialog,这四个组件是Swing库中仅有的重量级容器;2.中间容器:JPanel、JScrollPane、JSplitPane、JTabbedPane和JToolBar,用于容纳其他组件,但需要放置在顶层容器中。3.特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame、JLayeredPane、JRootPane。11.2Swing容器(续)与AWT容器不同,Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(JContentPane)上。内容面板是顶层容器包含的一个普通容器,它是一个轻量级组件。JMenuBarJWindow、JFrame、JDialog、JAppletJRootPaneJContentPaneJLayeredPaneJGlassPane图11-5Swing容器层次结构11.2.1简单的窗口对象示例例11.3显示一个红色的窗口,窗口的中间显示“红色的窗口”字符串。运行结果如图11-6所示。程序分析:这个例子中,在类Jpro11_3里面定义了一个JFrame窗口对象,属于Swing的顶级容器。通过setLocation()、setSize()、setBounds()等方法来改变窗口对象的状态,在Java的早期版本中,显示窗口一般使用s
本文标题:Java面向对象程序设计(第二版)第11章_编写图形用户界面程序
链接地址:https://www.777doc.com/doc-3355006 .html