面向对象的程序设计-Java张白一第三版第9章.ppt
《面向对象的程序设计-Java张白一第三版第9章.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计-Java张白一第三版第9章.ppt(114页珍藏版)》请在三一办公上搜索。
1、第9章 文字与图形GUI设计,9.1 GUI设计概述 9.2 绘制文字 9.3 Color类 9.4 绘制形状图形,9.1 GUI设计概述图形用户界面(Graphics User Interface,GUI)为应用程序提供了一个图形化的界面。GUI使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令、启动操作,并将系统运行的结果同样以图形的方式显示给用户,使应用程序具有画面生动、操作简便的效果,省去了字符命令界面中用户必须记忆各种命令的麻烦,深受广大用户的喜爱和欢迎,已经成为目前几乎所有应用软件的既成标准。Java提供的JFC是用于创建图形用户界面的主要组
2、件工具类库。,9.1.1 JFC简介JFC(Java Fundation Classes)是Java基础类库的简称,是Java提供的用于创建图形用户界面的类库。JFC主要包括AWT(Abstract Window Toolkit)组件、Swing组件、Java 2D API、Drag and Drop API以及Accessibility API。(1)AWT 组件:早期的窗口组件包,提供构造窗口的基本需求,例如按钮、文本框、复选框、对话框、菜单等。,(2)Swing 组件:新的窗口组件包,AWT中所有的组件均能在Swing中找到对等体并有很大的改进,此外,Swing还提供了一套丰富的组件和工
3、作框架,例如JTable、JList、JTree等,以提高GUI的开发效率。图9.1是AWT组件与Swing组件间的继承关系。从图9.1可以看出,Swing组件都是AWT的Container类的直接子类和间接子类。例如,JComponent抽象类直接继承Container类,JApplet间接继承Container类。,(3)Java 2D API:扩展了java.awt和类,它为Java应用程序提供了一套二维图形图像处理的类,并提供了丰富的绘图风格,使得独立于平台的图形应用程序的开发更加简便。(4)Drag and Drop API:Drag and Drop API使用户能够在两个应用程序
4、之间实现与平台无关的拖放功能,可以用于Java应用程序和不支持Java技术的应用程序之间交换数据。(5)Accessibility API:提供更先进的沟通界面,例如语音输入、触摸式屏幕等。本书主要讨论前三个API的使用。,图9.1 AWT组件与Swing组件间的继承关系,9.1.2 图形用户界面元素分类Java中构成图形用户界面的各种元素和成分可以粗略地分为三类:容器、控制组件和用户自定义成分。下面给予简略的说明。1容器容器是用来组织或容纳其他界面成分和元素的组件。一个容器可以包含许多组件,同时它本身也可以作为一个组件,放进另一容器中。我们可以用容器简化图形化界面的设计,以整体结构来布置界面
5、。一个应用程序的图形用户界面首先对应于一个复杂的容器,例如一个窗口。这个容器内部将包含许多界面成分和元素,其中某些界面元素本身也可能又是一个容器,这个容器再进一步包含它的界面成分和元素,依此类推就构成一个复杂整体图形界面。,如图9.1所示。抽象类是许多容器类的父类,Component抽象类中封装了容器通用的方法和属性,如图形的容器对象、大小、显示位置、前景色和背景色、边界、可见性等。容器类是Component抽象类的子类,是所有其他容器的父类,它具有组件的所有性质,它的主要功能是容纳其他的控制组件和容器。,2控制组件与容器不同,控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控
6、制组件的作用是完成与用户的一次交互,包括接收用户的一个命令(如菜单命令),接收用户输入的一个文本或选择,向用户显示一段文本或一个图形,等等。从某种程度上来说,控制组件是图形用户界面标准化的结果,目前常用的控制组件有选择类的单选按钮、复选按钮、下拉列表,有文字处理类的文本框、文本区域,有命令类的按钮、菜单等。Swing控制组件的层次结构如图9.2所示。,图9.2 Swing控制组件的层次结构图,使用控制组件,通常需要通过如下几步来实现:(1)创建某控制组件类的对象,指定其大小等属性。(2)使用某种布局策略,将该控制组件对象加入到某个容器中的指定位置。(3)将该组件对象注册给所能产生的事件对应的事
7、件监听程序,重载事件处理方法,实现利用该组件对象与用户交互的功能。,3用户自定义成分除了上述的标准图形界面元素外,编程人员还可以根据用户的需要,使用各种字型、字体和色彩设计一些几何图形、标志图案等,它们被称为用户自定义成分。用户自定义成分通常只能起到装饰、美化的作用,而不能响应用户的动作,也不具有交互功能。Java中的GUI辅助类见图9.3所示。由于用户自定义成分易于学习和掌握,同时,各种基本图形和说明性文字又是容器和控制组件的基本成分,而且考虑到由浅入深的学习规律,因此先在本章利用Swing包学习用户自定义成分,在第10章和第11章再学习控制组件和复杂的容器。,图9.3 GUI辅助类,9.1
8、.3 Swing的组件在javax.Swing包中定义的组件可以分为重量级组件和轻量级组件。1重量级组件与轻量级组件重量级组件(Heavyweight Component)也称顶级(Top Level)组件或顶级容器,有JFrame、JDialog、JWindow和JApplet四个。在任何Swing应用程序中都必须至少有一个重量级组件。重量级组件都与AWT类有关,如图9.1所示,JFrame继承自原有的AWT中的Frame类;JApplet继承自原有的AWT中的Applet类。,轻量级组件(Lightweight Component)是继承自JComponent抽象类的组件,是实现人机交互的
9、基本组件,它们必须被放到重量级组件中才能显示。2Swing容器的结构Swing容器的结构如图9.4和图9.5所示。每一个顶级容器都含有根面板(JRootPane),根面板由一个透明面板(glassPane)和一个分层面板(layeredPane)组成,分层面板又由内容面板(contentPane)和一个可选择的菜单条(JMenuBar)组成。,图9.4 Swing容器的结构,图9.5 JRootPane面板的组成结构,(1)透明面板(glassPane):位于JRootPane 中所有其他组件之上,是完全透明的。其主要功能是捕获鼠标事件和为在所有组件上绘图提供方便。该面板默认情况下是不可见的。
10、(2)分层面板(layeredPane):它是一个容器,提供在若干层上添加组件的能力。分层面板如同一个多层置物架,每一层都可以放置物品,但上面的物品会遮住下面的物品,如图9.6所示。,图9.6 分层面板的分层结构,(3)内容面板(contentPane):是layeredPane内的一层,也称为最底层或FrameContent 层,是顶级容器的内容面板,通常可以将组件加入到其中。加入Swing组件时,可利用getContentPane()方法得到contentPane容器,再利用add()方法将组件添加到容器中。(4)菜单条(JMenuBar):菜单条属于可选项,可有可无,它与分层面板在同一层
11、。,3轻量级组件的分类轻量级组件很多,可将其分为下述几类。(1)中间容器:常用于Swing应用程序中,例如JPanel(一般容器)、JScrollPane(滚动容器)、JSplitPane(分隔容器)、JTabbedPane(标签容器)等,如图9.7所示。(2)专用容器:在UI中起特殊作用的中间层。例如JInternalFrame(内窗体)、JLayeredPane、JRootPane。图9.8是内窗体的情况。,图9.7 4种中间容器,图9.8 JInternalFrame专用容器,(3)基本组件:主要有JButton(按钮)、JCheckBox(复选框)、JRadioButton(多选按钮)
12、、JComboBox(下拉式列表)、JList(列表)、JTextField(文本框)、JTextArea(文本域)、JMenu(菜单)等等,如图9.9所示。其中,JLabel(标签)是向用户显示不可编辑信息的组件;JTextField和JTextArea等是向用户显示可编辑信息的组件。4JRootPane常用的成员方法JRootPane常用的成员方法见表9.1。,图9.9 基本组件,表9.1 JRootPane常用的成员方法,5把组件添加到顶级容器中的方法把Swing组件放入一个Swing顶层容器的内容面板上,避免使用非Swing的重量级组件。可以使用两种方法在JFrame与JApplet等
13、顶级容器中添加组件:(1)利用getContentPane()方法获得当前容器的内容面板对象,再引用容器的add()方法来加入其他组件。例如,frame.getContentPane().add(childComponent)。,(2)先建立一个JPanel之类的中间容器,把组件添加到容器中,然后引用setContentPane()方法把该容器置为顶级容器的内容面板。例如:JPanel contentPane=new JPanel();/建立一个JPanel容器/把其他组件添加到Jpanel中frame.setContentPane(contentPane);/把contentPane的对象放
14、到frame的内容面板里,9.1.4 控制Applet 运行状态的基本方法Applet是一种执行于Web浏览器的小程序,是通过应用程序架构开发而得到的。在编写Web浏览器程序时,必须继承Applet类或JApplet类,必须覆盖必要的Applet 的成员方法,这些成员方法控制了Web页面上Applet对象的生成与执行。我们编写的每个Applet小程序都是Applet类的子类,在实际运行中,浏览器在下载字节码的同时,会自动创建一个用户Applet子类的对象,并在适当事件发生时自动调用该对象的几个主要方法。为此,下面先说明Applet应用程序的执行过程及其所引用的方法。,(1)init()方法:当
15、创建Java Applet且第一次使用支持Java的浏览器载入时,就会执行init()方法。该方法只执行一次,因此,可以利用init()方法进行一些只需执行一次的初始化操作。例如,通过init()方法初始化图像文件、声音文件、字体或者将其他一些对象添加到用户界面等。(2)start()方法:Applet运行init()方法之后将自动调用start()方法,而且,每当用户离开包含该Applet的主页后又再次返回时,或者当浏览器从图标状态恢复为窗口时,系统又会再执行一遍start()方法。start()方法是Applet的主体,体现了小应用程序要完成的功能。可以在start()方法中启动相关的线程
16、来执行任务。例如,继续一个动画,循环播放歌曲等。,(3)paint()方法:paint()方法是Container类的方法。它的主要作用是在Applet的界面中显示文字、图形和其他界面元素。浏览器调用paint()方法的事件主要有以下三种:当浏览器首次显示Applet时,会自动调用paint()方法。当用户调整窗口大小或移动窗口时,浏览器会调用paint()方法。当repaint()方法被调用时,系统将首先调用update()方法将Applet对象所占用的屏幕空间清空,然后调用paint()方法重画。,(4)stop()方法:当用户将浏览Applet程序所在的Web页面切换到其他页面时,浏览器
17、会自动调用stop()方法,让Applet程序终止运行。如果用户又回到Applet程序所在的Web页面,则浏览器重新启动Applet程序的start()方法。(5)destroy()方法:当浏览器正常关闭时,自动执行此方法,结束程序,释放所占资源。,9.1.5 JApplet类如图9.1所示,JApplet是Swing包中的类,是Applet的子类,它增加了对JFC/Swing组件架构的支持。Swing扩展了AWT组件集,定义了相对于java.awt包具有更多、更强功能的Swing GUI组件集。因此,本书介绍javax.swing的“J组件”,示例中的Java Applet小程序则为JApp
18、let小程序。如图9.4、9.5所示,JApplet包含内容面板容器,小应用程序必须把所有的组件添加到内容面板中,Java提供面板管理器类管理放入内容面板里的组件。在JApplet中,内容面板的默认面板管理器类是BorderLayout,约束条件是BorderLayout.CENTER。这部分内容详见第11章。,9.1.6 Java 2D API1Java 2D API的组成Java 2D API(Java 2D Application Programming Interface)是一个用于提供高性能图形操作的Java类的集合,由下面的主要包组成。java.awt:包含用于创建用户界面和绘制图
19、形图像的所有类。:提供创建和修改图像的各种类。:提供用于颜色空间的类。:提供与字体相关的类和接口。,:提供用于在与二维几何形状相关的对象上定义和执行操作的Java 2D类。:为通用的打印API 提供类和接口。:提供用于生成与呈现无关的图像的类和接口。Swing是在2D包上构造的,所以Swing 组件内利用Java 2D API很容易。,2Java 2D API坐标系应用Java 2D API绘制文本与图形时有两种坐标系,一种是与设备无关的逻辑坐标系,也称为用户坐标系;另一种是与设备(如显示器、打印机等)有关的坐标系。Java 2D API具有自动转换两种坐标系的功能。在默认情况下,用户坐标系的
20、原点在绘图表面的左上角,左上角坐标为(0,0),x坐标从左向右递增,y坐标从上向下递增。当文本与图形在屏幕上输出时,坐标单位以像素来度量。我们给出的所有文本与图形都是相对于用户坐标系的。图9.10中的点p表示其在用户坐标系中的位置。,图9.10 Java用户坐标系,9.1.7 Graphics2D对象1Graphics2D的三种图形对象Graphics2D对象可以输出三种图形对象:(1)shape(形状)图形对象。它是一些几何图形类型,如矩形、椭圆、直线和曲线,每种形状都实现接口。(2)text(文本)图形对象。它可以按不同的字体、风格和颜色输出。(3)image(图像)图形对象。它是类的对象
21、。image的内容非常多,本章主要讲述shape和text两类图形对象的绘制,偶尔也会涉及其他一些image的知识。,2Graphics2D对象的属性设置Graphics2D对象通过其属性封装绘图用的状态信息。因此,在绘制二维几何图形前,需要对图形对象的属性进行设置。Graphics2D对象提供了下面六个属性的设置和获得方法。(1)Paint属性:用于设置要绘制的图形或文字的颜色,通过setPaint()和getPaint()方法来实现。例如,假设g2是引用Graphics2D对象的引用变量,就可以用g2.setPaint(Color.green)语句设置该对象的Paint属性为绿色。,(2)
22、Stroke属性:通过setStroke()方法来控制图形轮廓线的形状。例如,用g2.setStroke(new BasicStroke(4)语句,设置Graphics2D对象的图形轮廓线的宽度为4个像素。(3)Font属性:用于设置输出文本的字体。(4)Transform属性:通过setTransform()方法来实现图形的缩放、旋转和移位等。(5)Composite rule属性:通过setComposite()方法来描述绘图操作如何与存在的背景相复合。(6)Clipping space属性:通过setClip()方法来设置剪切区域(clip area),即它将绘图限制在一个设定的区域内,
23、使绘图操作在这个区域外无效。,9.2 绘 制 文 字在Java 2D API中,各种文字都是以图形的方式输出的。以图形的方式绘制文字需要使用Graphics类和Graphics2D类提供的绘制文字的成员方法。绘制文字时,可以通过创建一个字体类(Font类)的对象来指定文字的字体名、字体样式及字体大小。Java 2D API通过调用计算机系统提供的字体来实现绘制文字的功能。,9.2.1 绘制文字的成员方法由于字符串可以用字符串对象、字符数组、字节数组这三种不同的形式表示,故Java在Graphics类中相应地提供了三个成员方法来绘制这三种不同形式的字符串(见表9.2)。Java在Graphics
24、2D类中提供的绘制字符的常用成员方法如表9.3所示。,表9.2 绘制字符和字符串的成员方法,表9.3 绘制字符的常用成员方法,【示例程序C9_1.java】使用Graphics类的三个成员方法绘制“WELCOME TO XIAN”。import;import;public class C9_1 extends JApplet private String s=“WELCOME!”;private char c=T,O,a,e,t;private byte b=d,4,X,I,047,A,N;public void paint(Graphics g)/覆盖Applet的成员方法,g.drawSt
25、ring(s,50,25);g.drawChars(c,0,2,50,50);g.drawBytes(b,2,5,50,75);在这个程序中,为了学习使用绘制字符和字符串的三个成员方法,我们分别创建了一个字符串对象、一个字符数组对象和一个字节数组对象。最后,通过覆盖类的paint()方法来实现文字的绘制。该程序的运行结果见图9.11。,图9.11 程序C9_1的运行结果,【示例程序C9_2.java】使用Graphics2D类的成员方法绘制“WELCOME TO XIAN”。import;import java.awt.Graphics2D;import;public class C9_2 e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 Java 张白一 第三
链接地址:https://www.31ppt.com/p-6034398.html