




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308071第15章 图 形Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308072动 因假设你希望画出如图所示的像条形图、时钟或停止符这样的图形,如何才能做到呢? Liang,
2、Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308073学习目标F描述GUI组件中的Java坐标系(第15.2节)。F使用Graphics类中的方法画图 (第15.3节)。F覆盖paintComponent方法在GUI组件上绘图 (第15.3节)。F使用面板作画布来绘图 (第15.3节)。F绘制字符串、直线、矩形、椭圆、弧形和多边形等 (第15.4、 15.6-15.7节)。F使用FontMetrics获取字体属性并且了解
3、如何将消息居中(第15.8节)。F在GUI组件中显示一个图像 (第15.11节)。F开发可重用的GUI组件FigurePanel、MessagePanel、StillClock和ImageViewer (第15.5、15.9、15.10、15.12节)。Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308074Java坐标系 (0, 0) X 轴 Y 轴 (x, y) x y Java坐标系 X轴 常规坐标系
4、(0, 0) Y 轴 Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308075每个GUI组件都有自己的坐标系 (0, 0) 组件 c2 组件 c1 (0, 0) (0, 0) (x1, y1) (x2, y2) (x3, y3) 组件 c3 c3 的坐标系 c2 的坐标系 c1 的坐标系 Liang, Introduction to Java Programming, Eighth Edition, (c)
5、2011 Pearson Education, Inc. All rights reserved. 01321308076Graphics类Graphics类中提供了绘制字符串、直线、矩形、椭圆、弧形、多边形和折线段的方法。 java.awt.Graphics +setColor(color: Color): void +setFont(font: Font): void +drawString(s: String, x: int, y: int): void +drawLine(x1: int, y1: int, x2: int, y2: int): void +drawRect(x: in
6、t, y: int, w: int, h: int): void +fillRect(x: int, y: int, w: int, h: int): void +drawRoundRect(x: int, y: int, w: int, h: int, aw: int, ah: int): void +fillRoundRect(x: int, y: int, w: int, h: int, aw: int, ah: int): void +draw3DRect(x: int, y: int, w: int, h: int, raised: boolean): void +fill3DRec
7、t(x: int, y: int, w: int, h: int, raised: boolean): void +drawOval(x: int, y: int, w: int, h: int): void +fillOval(x: int, y: int, w: int, h: int): void +drawArc(x: int, y: int, w: int, h: int, startAngle: int, arcAngle: int): void +fillArc(x: int, y: int, w: int, h: int, startAngle: int, arcAngle:
8、int): void +drawPolygon(xPoints: int, yPoints: int, nPoints: int): void +fillPolygon(xPoints: int, yPoints: int, nPoints: int): void +drawPolygon(g: Polygon): void +fillPolygon(g: Polygon): void +drawPolyline(xPoints: int, yPoints: int, nPoints: int): void 为后续绘图设置新的颜色 为后续绘图设置新的字体 绘制从点(x,y)开始的字符串 绘制从
9、(x1,y1)到(x2,y2)的一条直线 绘制一个左上角在点(x,y)处宽为 w、高为 h 的填充矩阵 绘制一个左上角在点(x,y)处、宽为 w、高为 h 的填充矩形 绘制一个圆弧宽度为 aw、高度为 ah 的圆角矩形 绘制一个圆弧宽度为 aw、高度为 ah 的填充圆角矩形 绘制一个从表面凸起或者凹进的 3D 矩形 绘制一个从表面凸起或者凹进的填充 3D 矩形 绘制一个椭圆,椭圆的外接矩形有参数 x、y、w 和 h 确定 绘制一个填充椭圆,椭圆的外接矩形由参数 x、y、w 和 h 确定 绘制一个圆弧,该圆弧是外接矩形由参数 x、y、w 和 h 确定的椭圆的一部分 绘制一个填充圆弧,该圆弧是外接
10、矩形由参数 x、y、w 和 h 确定的椭圆的一部分 绘制一个 x 坐标和 y 坐标构成的数组所定义的闭合多边形。每一对坐标(xi,yi)表示一个点 绘制一个 x 坐标和 y 坐标构成的数组所定义的填充多边形。每一对坐标(xi,yi)表示一个点 绘制一个有 Polygon 对象定义的闭合多边形 绘制一个有 Polygon 对象定义的填充多边形 绘制一个 x 坐标和 y 坐标构成的数组所定义的折线。每一个坐标(xi,yi)表示一个点 Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education
11、, Inc. All rights reserved. 01321308077paintComponent举例为了在组件上绘图,需要定义一个扩展JPanel的类,并且覆盖它的paintComponent方法来表示绘制什么。使用paintComponent重写这章的第一个程序。Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308078绘制几何图形F绘制字符串F绘制直线F绘制矩形F绘制椭圆F绘制弧形F绘制多边形Li
12、ang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308079绘制字符串 (0, 0) (getWidth(), 0) (getWidth(), getHeight() (0, getHeight() (x, y) S 在这里显示 (0, 0) (getWidth(), 0) (getWidth(), getHeight() (0, getHeight() (x1, y1) (x2, y2) drawLine(int
13、x1, int y1, int x2, int y2);drawString(String s, int x, int y);Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080710绘制矩形drawRect(int x, int y, int w, int h); fillRect(int x, int y, int w, int h);(x, y)w h (x, y) w h Liang, Introdu
14、ction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080711绘制圆角矩形drawRoundRect(int x, int y, int w, int h, int aw, int ah);fillRoundRect(int x, int y, int w, int h, int aw, int ah); (x, y) w h ah/2 aw/2 Liang, Introduction to Java Programming, Eighth
15、 Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080712绘制椭圆drawOval(int x, int y, int w, int h);fillOval(int x, int y, int w, int h); (x, y) w h Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080713实例学习:Figure
16、Panel类这个例子开发可以显示各种图形的非常有用的类。这个类允许用户设置图的类型、指定是否填充该图形以及是否在面板上显示这个图形。 FigurePanel +LINE = 1 +RECTANGLE = 2 +ROUND_RECTANGLE = 3 +OVAL = 4 -type: int -filled: boolean +FigurePanel() +FigurePanel(type: int) +FigurePanel(type: int, filled: boolean) +getType(): int +setType(type: int): void +isFilled(): bo
17、olean +setFilled(filled: boolean): void javax.swing.JPanel -char token +getToken +setToken +paintComponet +mouseClicked LINE, RECTANGLE, ROUND_RECTANGLE和 OVAL都是常量,表明图形的类型 表明图形的类型(默认值:1) 表明图形是否是填充的(默认值:false) 创建一个默认的图形面板 创建一个指定类型的图形面板 创建一个指定类型和填充属性的图形面板 返回图形类型 设置一个新的图形类型 检查图形是否被填充一种颜色 设置一个新的填充属性 Lian
18、g, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080714测试FigurePanel这个例子开发可以显示各种图形的非常有用的类。这个类允许用户设置图的类型、指定是否填充该图形以及是否在面板上显示这个图形。Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserve
19、d. 013213080715绘制弧形drawArc(int x, int y, int w, int h, int angle1, int angle2);fillArc(int x, int y, int w, int h, int angle1, int angle2);角的单位是度Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080716绘制弧形举例Liang, Introduction to Jav
20、a Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080717绘制多边形和折线段int x = 40, 70, 60, 45, 20;int y = 20, 40, 80, 45, 60;g.drawPolygon(x, y, x.length);(x0, y0)(x1, y1)(x2, y2)(x3, y3)(x4, y4)g.drawPolyline(x, y, x.length); (x0, y0) (x1, y1) (x2, y2) (x3, y3) (x
21、4, y4) Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080718使用Polygon类绘制多边形 Polygon polygon = new Polygon(); polygon.addPoint(40, 59); polygon.addPoint(40, 100); polygon.addPoint(10, 100); g.drawPolygon(polygon);Liang, Introductio
22、n to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080719绘制多边形举例Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080720使用FontMetrics类居中显示字符串可以在一个面板的任何位置显示一个字符串。可以居中显示它吗?要想做到这一点,需要使用Fon
23、tMetrics类,对特定字体的字符串测量出确切的宽度和高度。FontMetrics可以测量给定字体的以下属性:Fpublic int getAscent()Fpublic int getDescent()Fpublic int getLeading()getAscent()getLeading()getDescent()getHeight()Fpublic int getHeight()Fpublic int stringWidth(String str)Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pea
24、rson Education, Inc. All rights reserved. 013213080721FontMetrics类FontMetrics是一个抽象类。要得到某种特定字体的FontMetrics对象,可以使用定义在Graphics类中的以下getFontMetrics方法: public FontMetrics getFontMetrics(Font f) 返回指定字体的字体尺寸。 public FontMetrics getFontMetrics() 返回当前字体的字体尺寸。Liang, Introduction to Java Programming, Eighth Edi
25、tion, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080722 Welcome to Java stringWidth stringAscent getHeight() getWidth() panel Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080723实例学习:MessagePanel类 MessagePanel -x
26、Coordinate: int -yCoordinate: int -centered: boolean -message: String -interval: int +MessagePanel() +MessagePanel(message: String) +moveLeft(): void +moveRight(): void +moveUp(): void +moveDown(): void javax.swing.JPanel -char token +getToken +setToken +paintComponet +mouseClicked 在类中提供了这些数据域的 get和
27、 set方法,但是为使 UML图简洁将其省略 消息的 x坐标(default 20). 消息的 y坐标(default 20). 表明是否居中显示消息 要显示的消息 在面板中移动消息的间隔 构建一个默认的消息面板 构建一个带指定字符串的消息面板 向左移动消息 向右移动消息 向上移动消息 向下移动消息 本实例开发一个有用的类,它可以在面板中显示一条消息。这个类允许用户设置消息的位置、居中放置消息的位置、居中放置消息、使用指定间距移动消息。Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Educat
28、ion, Inc. All rights reserved. 013213080724实例学习:StillClock类 StillClock -hour: int -minute: int -second: int +StillClock() +StillClock(hour: int, minute: int, second: int) +setCurrentTime(): void javax.swing.JPanel -char token +getToken +setToken +paintComponet +mouseClicked 在类中提供了这些数据域的 get和 set方法,但
29、是为使 UML图简洁将其省略 时钟的小时 时钟的分 时钟的秒 以当前时间按构建一个默认的时钟 以特定的时间构建一个时钟 给当前时间设置小时、分钟、秒 Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080725绘制时钟xEnd = xCenter + handLength sin()yEnd = yCenter - handLength cos()由于一分钟有60秒,所以秒钟的角度是:second (2/60)
30、Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080726绘制时钟(续)xEnd = xCenter + handLength sin()yEnd = yCenter - handLength cos()分钟的位置是由分钟数和秒数决定。和秒一起计算的精确分钟值是minute + second/60。例如:如果时间是3分30秒,那么总的分钟数是3.5。由于一小时有60分钟,所以分钟的角度是(minute + s
31、econd/60) (2/60)Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080727绘制时钟(续)xEnd = xCenter + handLength sin()yEnd = yCenter - handLength cos()由于一圈被分为12小时,所以时钟的角度是(hour + minute/60 + second/(60 60) (2/12)Liang, Introduction to Java
32、 Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080728显示图像图标你已经学习了如何创建图像图标以及如何在标签和按钮上显示它们。例如:下面的语句创建一个图像图标并在标签上显示它:ImageIcon icon = new ImageIcon(image/us.gif);JLabel jlblImage = new JLabel(imageIcon);图像图标显示一个尺寸固定的图像。为了显示大小灵活的图像,需要使用java.awt.Image类。可以使用getIm
33、age()方法从一个图像图标中创建一个图像,如下所示:Image image = imageIcon.getImage();Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 013213080729显示图像使用标签作为显示图像的区域比较简单、方便,但是你对如何显示图像没有多少控制权。更加灵活的显示图像的方式就是在面板上使用Graphics类的drawImage方法。drawImage方法的四个版本如图所示: java.awt
34、.Graphics +drawImage(image: Image, x: int, y: int, bgcolor: Color, observer: ImageObserver): void +drawImage(image: Image, x: int, y: int, observer: ImageObserver): void +drawImage(image: Image, x: int, y: int, width: int, height: int, observer: ImageObserver): void +drawImage(image: Image, x: int, y: int, width: int, height: int, bgcolor: Color, observer: ImageObserver): voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海淀柏油路面施工方案
- 社区医疗共建方案范本
- 广东人造植物墙施工方案
- 闽侯县蚊虫防治施工方案
- 2025年播音主持题库真题及答案
- 污水处理车间试卷及答案
- 2025年河北保定高碑店市公开招聘卫健局下属事业单位工作人员62名模拟试卷及一套完整答案详解
- 大棚自动化施工方案细则
- 支撑结构地下室施工方案
- 甘肃大厦景观灯施工方案
- 2025秋人教版(2024)二年级上册数学教学计划
- 桥梁河床断面测量课件
- 中药质量检测技术
- 普外科肛肠科科室介绍
- 事业单位工勤人员技师考试职业道德复习试题及答案
- 2025年三级安全教育试题及答案
- 危化品经营许可证管理办法
- 2024和2025年中职高考对口升学(理论考试)真题卷【财经商贸大类】
- 苏教版一年级科学上册教学资源计划
- 矿山爆破施工管理制度
- AI技术赋能中小学教学模式创新与实践研究
评论
0/150
提交评论