Java 2实用教程课件(第3版第14章)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 1.直线 • 使用java.awt.geom包中的Line2D的子类 Line2D.Double创建一个直线对象。如: • Line2D line=new Line2D.Double(12,20,100, 90); • 创建一条(12,20)到(100,90)直线对象。 • 2.矩形 • 使用java.awt.geom包中的Rectangle2D. Double类来创建一个矩形对象,如: • Rectangle2D rect=new Rectangle2D. Double (50,50,300,50.897); • 上述语句创建了一个左上角坐标是(50,50), 宽是300,高是50.987的一个矩形对象。
14.2绘制基本图形
• 1.直线 • drawLine(int x1,int y1,int x2,int y2) 绘制从起点(x1,y1)到终点 (x2,y2)的直线段 • 2.矩形 • drawRect (int x,int y,int w,int h) 绘制矩形 • fillRect (int x,int y,int w,int h) 填充矩形 • 矩形的左上角的坐标由参数x、y指定,矩形的宽和高由参数w,h指 定。 • 3.圆角矩形 • drawRoundRect(int x,int y,int w,int h,int arcW,int arcH) 绘制圆 角矩形 • fillRoundRect(int x,int y,int w,int h,int arcW,int arcH) 填充圆角 矩形 • 参数arcW、arcH指定圆角的尺寸,见图14.1中的4个黑角部分。
14.6 图形的布尔运算
• 假设T1、T2是两个图形,那么 • T1和T2的布尔“与”(AND)运算的结果是两 个图形的重叠部分。 • T1和T2的布尔“或”(OR)运算的结果是两个 图形的合并。 • T1和T2的布尔“差”(NOT)运算的结果是T1 去掉T1和T2的重叠部分。 • T1和T2的布尔“异或”(XOR)运算的结果是 两个图形的非重叠部分。
• 3.圆角矩形 • 使用java.awt.geom包中的RoundRectangle2D. Double类来创建一个圆角矩形对象: • RoundRectangle2D rect_round=new RoundRectangle2D. Double (50,50,300,50,8,5); • 上述语句创建了一个左上角坐标是(50,50),宽是300, 高是50,圆角的长轴和短轴分别为8和5的圆角矩形对 象。 • 4.椭圆 • 使用java.awt.geom包中的Ellipse2D. Double类来创 建一个椭圆对象: • Ellipse2D ellipse=new Ellipse2D. Double (50,30,300,50); • 上述语句创建了一个外接矩形的左上角坐标是(50,30), 宽是300,高是50的椭圆对象。
第14章 图形与图像
14.1 绘制文本 14.2 绘制基本图形 14.3 建立字体 14.4 清除 14.5 Java 2D 14.6 图形的布尔运算 14.7 绘制钟表 14.8 绘制图像 14.9 制作JPG图像 14.10 XOR绘图模式 14.11 打印图形、图像
• Component类有一个方法public void paint(Graphics g),我们可以在其子类中重写 这个方法。当重写这个方法时,相应的java运 行环境将参数g实例化,对象g就可以在该组件 的坐标系内绘制图形、图像等。组件都是矩形 形状,组件本身有一个默认的坐标系,组件的 左上角的坐标值是(0,0)。如果一个组件的宽 是200,高是80,那么,该坐标系中,x坐标 的最大值是200,y坐标的最大值是80。
• • • •
• • •
•
•
4.椭圆 drawOval(int x,int y,int w,int h) 绘制椭圆 fillOval(int x,int y,int w,int h) 填充椭圆 其中,参数x、y给出椭圆距x轴和y轴的距离,参数w、h给出椭 圆的宽和高。 5.圆弧 圆弧就是椭圆的一部分。 drawArc(int x,int y,int width,int height,int starAngle, int arcAngle) 绘制圆弧 fillArc(int x,int y,int width,int height,int starAngle,int arcAngle) 填充圆弧 参数x、y、width、heigth指定椭圆的位置和大小,参数 starAngle和 arcAngle的单位都是“度”。而起始角度的0度是3 点钟的方位。参数starAngle,arcAngle表示从starAngle的角 度开始逆时针或顺时针方向画arcAngle度的弧,当arcAngle是 正值时为逆时针,否则为顺时针。starAngle的值可以是负值, 例如-90度是6点的方位。
14.7 绘制钟表
• 钟表可以显示当前本机的时间。在这里 我们要用到一个数学公式,如果一个圆 的圆心是(0,0),那么对于给定圆上的一 点(x,y),该点按顺时针旋转α弧度后的的 坐标(m,n)由下列公式计算: m=x×cos(α)- y×sin(α) n=y×cos(α)+x×sin(α)
14.8 绘制图像
14.5ቤተ መጻሕፍቲ ባይዱJava 2D
• Java1.2给出了一个新类Graphics2D,它是 Graphics类的子类。一个Graphics2D对象把 直线、圆等作为一个对象来绘制,也就是说, 如果想用一个Graphics2D类型的“画笔”来 画一个圆的话,就必须先创建一个圆的对象。 我们仍需使用paint(Graphics g)方法来绘制, 只需将Graphics对象强制转化为Graphics2D 对象即可。
drawImage(Image img,int x,int y,ImageObserver observer):
14.9 制作JPG图像
制作JPG图像步骤如下: • 用java.awt.image包中的BufferedImage类(Image的 子类)建立一个BufferedImage对象。 • BufferedImage对象调用createGraphics()获得一个 Graphics2D对象。 • Graphics2D对象调用相应的方法在BufferedImage对 象中绘制图形或图像。 • JPEGCodec类调用 createJPEGEncoder(OutPutStream out) 返回一个 JPEGImageEncoder对象。 • JPEGImageEncoder对象调用encode(Image image)方 法将BufferedImage对象写入到输出流。
14.3 建立字体
• setFont(Font f) 设置字体。当绘制文 本时,Graphics对象用参数f指定的字体。
14.4 清除
• clearRect(int x,int y,int width,int height) 用背景色填充指定矩形以达到 清除该矩形的效果,也就是说当一个 Graphics对象使用该方法时,相当于在 使用一个“橡皮擦”。参数x、y是被清 除矩形的左上角的坐标;另外两个参数 是被清除矩形的宽和高。
14.1绘制文本
• drawString(String s, int x, int y) 从参数x、 y指定的坐标位置处,从左向右绘制参数s指定 的字符串。 • drawChars(char data[],int offset, int length, int x, int y) 绘制data数组中的部分 字符,length指定数组中要连续绘制的字符的 个数,offset是首字符在数组中的位置。
• 7.旋转图形 • 我们有时需要平移、缩放或旋转一个图形,我们可以使用 AffineTransform类来实现对图形的这些操作。 (1)首先使用AffineTransform类创建一个对象: AffineTransform trans=new AffineTransform(); 对象trans具有最常用的三个方法来实现对图形变换操作: translate(double a,double b) 将图形在x轴方向移动a 个单位 像素,y 轴方向移动b个像素单位。a是正值时向右移动,负值是向左移动;b是正 值时是向下移动,负值向上移动。 scale(double a,double b) 将图形在x轴方向缩放a倍,y轴方向缩放b倍。 rotate(double number,double x,double y) 将图形沿顺时针或逆时针以 (x,y)为轴点旋转number个弧度。 (2)进行需要的变换,比如要把一个矩形绕点(100,100)顺时针旋转60 度,那么就要先作好准备: trans.rotate(60.0*3.1415927/180,100,100); (3)把Graphics对象,比如g_2d设置为具有trans这种功能的“画笔”: g_2d.setTransform(trans); 假如rect是一个矩形对象,那么g_2d.draw(rect)画的就是旋转后的矩形
• Toolkit类是一个抽象类,不能用构造方法直接创建 这样对象,但Java运行环境提供了一个Toolkit对 象,任何一个组件调用getToolkit()方法可以返 回这个对象的引用。Tollkit类有一个获取图像的方 法getImage(String s)。 • Graphics 类提供的方法: 绘制的Image对象;x、y是要绘制指定图像的矩形 的左上角所处的位置,observer是加载图像时的图 像观察器。
• • • •
6.绘制二次曲线和三次曲线 二次曲线可用二阶多项式 y(x)=ax2+bx+c 来表示。一条二次曲线需要三个点来确定。使用 java.awt.geom包中的QuadCurve2D.Double类来创建 一个二次曲线: • QuadCurve2D curve=new QuadCurve2D.Double (50,30,10,10,50,100); • 上述代码片段使用端点(50,30)和(50,100)及 控制点(10,10)创建了一条二次曲线。
• 5.绘制圆弧 • 使用java.awt.geom包中的Arc2D. Double类创建一个 圆弧对象: • Arc2D ellipse=new Arc2D. Double (50,30,300,50,0,100,Arc.PIE); • 上述语句创建了一个外接矩形的左上角坐标是(50,30), 宽是300,高是50的起始角是0度终止角是100度的饼 弧对象。其中,最后一个参数取值:Arc2D.OPEN、 Arc2D.CHORD、Arc2D.PIE决定弧是开弧、弓弧和 饼弧。