《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt

上传人(卖家):momomo 文档编号:5787092 上传时间:2023-05-09 格式:PPT 页数:58 大小:548KB
下载 相关 举报
《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt_第1页
第1页 / 共58页
《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt_第2页
第2页 / 共58页
《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt_第3页
第3页 / 共58页
《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt_第4页
第4页 / 共58页
《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、教学目标教学目标8.1 Java图形环境与图形对象8.2 颜色控制8.3 字体控制8.4 使用Graphics绘制图形8.5 Java2D API 8.5.1设置 Graphics2D 上下文 8.5.2使用Graphics2D绘制图形JavaJava的图形环境的图形环境(Graphics Context)(Graphics Context)使程序员能在屏幕上绘图。使程序员能在屏幕上绘图。GraphicsGraphics(java.awt(java.awt包包)类类:是抽象类是抽象类,与平台相关与平台相关GraphicsGraphics对象对象用于管理图形环境如何绘图。用于管理图形环境如何绘图

2、。类类GraphicsGraphics提供了一组方法提供了一组方法:在屏幕上绘制文本在屏幕上绘制文本,绘制图像绘制图像 绘制各种图形(如线条、椭圆、矩形和其他多边形)绘制各种图形(如线条、椭圆、矩形和其他多边形)设置字体和控制颜色等设置字体和控制颜色等 8.1 图形环境和图形对象图形环境和图形对象nComponent(java.awt)类是GUI 组件的超类。Component类中有一个paint方法:public void paint(Graphics g)/使用g绘制各种图形 n需要在Component组件上重新绘制图形时:调用repaint()方法 repaint()update()pa

3、int()8.1 图形环境和图形对象图形环境和图形对象8.1 图形环境和图形对象图形环境和图形对象Classes and interfaces from the Java2D API that appear in package java.awtObjectColorComponentFontFontMetricsGraphicsPolygonGraphics2D interface java.awt.Paint interface java.awt.Shape interface java.awt.StrokeClasses from the Java2D API that appear i

4、n package java.awt.geomGradientPaintBasicStrokeTexturePaintRectangularShapeGeneralPathLine2DRoundRectangle2DArc2DEllipse2DRectangle2DJava2D API中的类和接口的继承层次中的类和接口的继承层次Java的坐标系统的坐标系统n以像素为单位,Screen的左上角(0,0)X a xi sY a xi s(0,0)(x,y)+x+y8.2 颜色控制颜色控制nJava中每一种颜色都看成是由红(R)、绿(G)、蓝(B)三原色组合而成的。nColor(java.awt包)

5、类:设置绘图或显示GUI组件的颜色。n创建颜色的方法:new Color(int r,int g,int b)/intint从从02550255 new Color(float r,float g,float b)/float从0.01.0 Color.red /or Color.RED 8.2 颜色控制颜色控制 颜色名称颜色名称 RGBRGB值值白色白色 Color.white Color.white 255255,255255,255255黑色黑色 Color.black Color.black 0 0,0 0,0 0浅灰浅灰 Color.lightGray Color.lightGray

6、 192192,192192,192192灰色灰色 Color.gray Color.gray 128128,128128,128128暗灰暗灰 Color.darkGray Color.darkGray 6464,6464,6464红色红色 Color.red Color.red 255255,0 0,0 0绿色绿色 Color.green Color.green 0 0,255255,0 0蓝色蓝色 Color.blue Color.blue 0 0,0 0,255255黄色黄色 Color.yellow Color.yellow 255255,255255,0 0紫红紫红 Color.m

7、agenta Color.magenta 255255,0 0,255255青蓝青蓝 Color.cyan Color.cyan 0 0,255255,255255粉红粉红 Color.pink Color.pink 255255,175175,175175橘色橘色 Color.orange Color.orange 255255,200200,0 0ColorColor类中共定义了类中共定义了1313种静态颜色常量种静态颜色常量8.2 颜色控制颜色控制n设置绘图环境的当前颜色:void setColor(Color c)设置当前颜色 Color getColor()返回图形环境当前颜色的值

8、例:设g是graphics对象,设置绘图的当前颜色为绿色:g.setColor(Color.green);g.setColor(new Color(0,255,0);8.2 颜色控制颜色控制n设置设置GUIGUI组件的背景和前景色组件的背景和前景色:组件对象组件对象.setBackground(Color c).setBackground(Color c)组件对象组件对象.setForeground(Color c).setForeground(Color c)例:设置一个例:设置一个JLabelJLabel组件的背景色是黄色,前景组件的背景色是黄色,前景色为红色色为红色:JLabel Jl1

9、=new Jlabel(JLabel Jl1=new Jlabel(“姓名姓名”);Jl1.setBackground(Color.YELLOW);Jl1.setBackground(Color.YELLOW);Jl1.setForeground(Color.RED);)Jl1.setForeground(Color.RED);)n例子8-1,该应用程序通过绘制不同颜色的填充矩形和字符串。运行结果如下:ShowColors.java ShowColors.java import java.awt.*;import javax.swing.*;public class ShowColors ex

10、tends JFrame /constructor sets windows title bar string and dimensions public ShowColors()super(Using colors);setSize(400,130);setVisible(true);/draw rectangles and Strings in different colors public void paint(Graphics g)/call superclasss paint method super.paint(g);/set new drawing color using int

11、egers g.setColor(new Color(255,0,0);g.fillRect(25,25,100,20);g.drawString(Current RGB:+g.getColor(),130,40);/set new drawing color using floats g.setColor(new Color(0.0f,1.0f,0.0f);g.fillRect(25,50,100,20);g.drawString(Current RGB:+g.getColor(),130,65);/set new drawing color using static Color objec

12、ts g.setColor(Color.blue);g.fillRect(25,75,100,20);g.drawString(Current RGB:+g.getColor(),130,90);/display individual RGB values Color color=Color.magenta;g.setColor(color);g.fillRect(25,100,100,20);g.drawString(RGB values:+color.getRed()+,+color.getGreen()+,+color.getBlue(),130,115);/end method pai

13、nt /execute application public static void main(String args)ShowColors application=new ShowColors();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/end class ShowColorsn例 使用javax.swing包中JColorChooser GUI组件,使应用程序的用户能够选择各种颜色颜色控制示例/ShowColors2.java/Choosing colors with JColorChooser.import

14、java.awt.*;import java.awt.event.*;import javax.swing.*;public class ShowColors2 extends JFrame private JButton changeColorButton;private Color color=Color.lightGray;private Container container;/set up GUI public ShowColors2()super(Using JColorChooser);container=getContentPane();container.setLayout(

15、new FlowLayout();/set up changeColorButton and register its event handler changeColorButton=new JButton(Change Color);changeColorButton.addActionListener(new ActionListener()/anonymous inner class /display JColorChooser when user clicks button public void actionPerformed(ActionEvent event)color=JCol

16、orChooser.showDialog(ShowColors2.this,Choose a color,color);/set default color,if no color is returned if(color=null)color=Color.lightGray;/change content panes background color container.setBackground(color);/end anonymous inner class );/end call to addActionListener container.add(changeColorButton

17、);setSize(400,130);setVisible(true);/end ShowColor2 constructor /execute application public static void main(String args)ShowColors2 application=new ShowColors2();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/end class ShowColors28.3 字体控制字体控制nFont(java.awt)类:创建字体显示效果.n字体的设置包括:n字体名称(nam

18、e)n样式(style)n大小(size)8.3 字体控制字体控制n创建字体创建字体Font类类的构造方法的构造方法:Font(String name,int style,int size)(1)name字体名:如“TimesRoman”,”Courier”等;(2)Style字体风格:Font.BOLD(粗体)Font.ITALIC(斜体)Font.PLAIN(普通体)可以进行相加运算来生成复合style;(3)size:尺寸大小(1/72 of inch)n例子8-2,该程序以不同大小的四种字体来显示文本,运行结果如下图:Fonts.java Fonts.java import java.

19、awt.*;import javax.swing.*;public class Fonts extends JFrame /set windows title bar and dimensions public Fonts()super(Using fonts);setSize(420,125);setVisible(true);public static void main(String args)Fonts application=new Fonts();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/end clas

20、s Fonts/paint()方法方法public void paint(Graphics g)/call superclasss paint method super.paint(g);/set font to Serif(Times),bold,12pt and draw a string g.setFont(new Font(Serif,Font.BOLD,12);g.drawString(Serif 12 point bold.,20,50);/set font to Monospaced(Courier),italic,24pt and draw a string g.setFont

21、(new Font(Monospaced,Font.ITALIC,24);g.drawString(Monospaced 24 point italic.,20,70);/set font to SansSerif(Helvetica),plain,14pt and draw a string g.setFont(new Font(SansSerif,Font.PLAIN,14);g.drawString(SansSerif 14 point plain.,20,90);/set font to Serif(Times),bold/italic,18pt and draw a string g

22、.setColor(Color.RED);g.setFont(new Font(Serif,Font.BOLD+Font.ITALIC,18);g.drawString(g.getFont().getName()+g.getFont().getSize()+point bold italic.,20,110);/end method paint8.4 8.4 使用使用Graphics绘制图形绘制图形n使用Graphics对象绘制图形:n绘制直线、矩形、圆、椭圆、弧、多边形和折线等n使用Graphics对象的画图方法进行绘图。8.4 8.4 使用使用Graphics绘制图形绘制图形1.1.画线画

23、线 drawLine(int x1,int y1,int x2,int y2)drawLine(int x1,int y1,int x2,int y2)(x1,y1)(x1,y1)表示线段的一个坐标点表示线段的一个坐标点,(x2,y2)(x2,y2)表示线段的另一个坐标点表示线段的另一个坐标点 2.2.画矩形画矩形 drawRect(int x,int y,int width,int height)fillRect(int x,int y,int width,int height)x,y:表示矩形左上角的坐标 width,height:表示矩形的宽度和高度。8.4 8.4 使用使用Graphi

24、cs绘制图形绘制图形 画圆角矩形画圆角矩形:矩形的四个顶角呈圆弧状 drawRoundRect(int x,int y,int width,int height,drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)int arcWidth,int arcHeight)fillRoundRect(int x,int y,int width,int height,fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeig

25、ht)int arcWidth,int arcHeight)arcWidth:圆角弧的横向直径arcHeight:圆角弧的纵向直径8.4 8.4 使用使用Graphics绘制图形绘制图形 draw3DRect(int x,int y,int width,int height,boolean raised)fill3DRect(int x,int y,int width,int height,boolean raised)raised:定义立体矩形凸出(true)还是凹下(false)画立体矩形画立体矩形(3D矩形矩形)8.4 8.4 使用使用Graphics绘制图形绘制图形 3.3.画椭圆画椭

26、圆 drawOval(int x,int y,int width,int height)drawOval(int x,int y,int width,int height)fillOval(int x,int y,int width,int height)fillOval(int x,int y,int width,int height)x,y:x,y:表示椭圆所在的矩形左上角的坐标表示椭圆所在的矩形左上角的坐标 width,height:width,height:表示矩形的宽度和高度。表示矩形的宽度和高度。8.4 8.4 使用使用Graphics绘制图形绘制图形 弧为椭圆的一部分。用度数来衡

27、量弧的角度.从起始角扫过 弧张角(arc angle)所指定的度数,就绘制了一条弧。起始角是弧形开始时的度数。弧张角指弧形扫过的度数:弧张角为正数时,表示反时针方向扫过,为负数时,表示顺时针方向扫过.4.4.画弧画弧8.4 8.4 使用使用Graphics绘制图形绘制图形Positive and negative arc angles900180270900180270Positive anglesNegative angles110-1108.4 8.4 使用使用Graphics绘制图形绘制图形 画弧画弧方法方法:相对于边界矩形的左上角坐标(x,y),宽度width和高度height,绘制一

28、条弧形,弧段从startAngle开始绘制,并扫过arcAngle度数。void drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)void fillArc(int x,int y,int width,int height,int startAngle,int arcAngle)public void paint(Graphics g)super.paint(g);/call superclasss paint method /start at 0 and sweep 360 degrees g.setCo

29、lor(Color.YELLOW);g.drawRect(15,35,80,80);g.setColor(Color.BLACK);g.drawArc(15,35,80,80,0,360);/start at 0 and sweep 110 degrees g.setColor(Color.YELLOW);g.drawRect(100,35,80,80);g.setColor(Color.BLACK);g.drawArc(100,35,80,80,0,110);/start at 0 and sweep-270 degrees g.setColor(Color.YELLOW);g.drawRe

30、ct(185,35,80,80);g.setColor(Color.BLACK);g.drawArc(185,35,80,80,0,-270);/start at 0 and sweep 360 degrees g.fillArc(15,120,80,40,0,360);/start at 270 and sweep-90 degrees g.fillArc(100,120,80,40,270,-90);/start at 0 and sweep-270 degrees g.fillArc(185,120,80,40,0,-270);/end method paint5.绘制多边形和折线绘制多

31、边形和折线 n多边形Polygonsn封闭式多边形(即起点和终点用直线连接)n折线 Polylinesn绘制一系列相连的线段(起点和终点不用直线连接)n绘制多边形或折线时,用一组点表示要绘制图形的顶点坐标。n这组点的X族的坐标用一维数组int xPoints表示,nY族的坐标用一维数组int yPoints表示。n 这组点的点数用整型变量 point表示。8.4 8.4 使用使用Graphics绘制图形绘制图形画画Polygons封闭式多边形的方法:封闭式多边形的方法:void drawPolygon(int xPoints,int yPoints,void drawPolygon(int x

32、Points,int yPoints,int points)int points)/空心空心void fillPolygon(void fillPolygon(intintxPoints,xPoints,intintyPoints,yPoints,intintpointspoints)/画填充型画填充型void drawPolygon(Polygon p)void drawPolygon(Polygon p)void fillPolygon(Polygon p)void fillPolygon(Polygon p)Polygon(int xValues,int yValues,int Poly

33、gon(int xValues,int yValues,int numberOfPoints)numberOfPoints):/构造一个多边形对象构造一个多边形对象8.4 8.4 使用使用Graphics绘制图形绘制图形画折线画折线Polylines的方法的方法 void drawPolyline(int xPoints,int yPoints,void drawPolyline(int xPoints,int yPoints,int points)int points)8.4 8.4 使用使用Graphics绘制图形绘制图形例:绘制多边形和折线int j=700;int j=700;int

34、xValues=20+j,40+j,50+j,30+j,20+j,15+j;int xValues=20+j,40+j,50+j,30+j,20+j,15+j;int yValues=50,50,60,80,80,60;int yValues=50,50,60,80,80,60;Polygon polygon1=new Polygon(xValues,yValues,6);Polygon polygon1=new Polygon(xValues,yValues,6);g.drawPolygon(polygon1);g.drawPolygon(polygon1);int xValues2=70+

35、j,90+j,100+j,80+j,70+j,65+j,60+j;int xValues2=70+j,90+j,100+j,80+j,70+j,65+j,60+j;int yValues2=100,100,110,110,130,110,90;int yValues2=100,100,110,110,130,110,90;g.drawPolyline(xValues2,yValues2,7);g.drawPolyline(xValues2,yValues2,7);P0p1p2p3p4p5v5v2v4v0v1v3v6例例8-3绘制线条、矩形、椭圆、弧、多边形绘制线条、矩形、椭圆、弧、多边形和折线

36、。和折线。/DrawingGraphics.Javaimport java.awt.*;import javax.swing.*;public class DrawingGraphics extends JFrame public DrawingGraphics()/set windows title bar String super(Drawing lines,rectangles and ovals);setSize(850,170);setVisible(true);public void paint(Graphics g)super.paint(g);/call superclasss

37、 paint method g.setColor(Color.RED);g.drawLine(5,33,350,33);g.setColor(Color.BLUE);g.drawRect(5,40,90,55);g.fillRect(100,40,90,55);g.setColor(Color.CYAN);g.fillRoundRect(195,40,90,55,50,50);g.drawRoundRect(290,40,90,55,20,20);g.setColor(Color.YELLOW);g.draw3DRect(5,100,90,55,true);g.fill3DRect(100,1

38、00,90,55,false);g.setColor(Color.MAGENTA);g.drawOval(195,100,90,55);g.fillOval(290,100,90,55);int i=400;g.setColor(Color.YELLOW);g.drawRect(15+i,35,80,80);g.setColor(Color.BLACK);g.drawArc(15+i,35,80,80,0,360);/start at 0 and sweep 110 degrees g.setColor(Color.YELLOW);g.drawRect(100+i,35,80,80);g.se

39、tColor(Color.BLACK);g.drawArc(100+i,35,80,80,0,110);/start at 0 and sweep-270 degrees g.setColor(Color.YELLOW);g.drawRect(185+i,35,80,80);g.setColor(Color.BLACK);g.drawArc(185+i,35,80,80,0,-270);/start at 0 and sweep 360 degrees g.fillArc(15+i,120,80,40,0,360);/start at 270 and sweep-90 degrees g.fi

40、llArc(100+i,120,80,40,270,-90);/start at 0 and sweep-270 degrees g.fillArc(185+i,120,80,40,0,-270);int j=700;int xValues=20+j,40+j,50+j,30+j,20+j,15+j;int yValues=50,50,60,80,80,60;Polygon polygon1=new Polygon(xValues,yValues,6);g.drawPolygon(polygon1);int xValues2=70+j,90+j,100+j,80+j,70+j,65+j,60+

41、j;int yValues2=100,100,110,110,130,110,90;g.drawPolyline(xValues2,yValues2,7);/end method paint public static void main(String args)DrawingGraphics application=new DrawingGraphics();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);8.5 Java2D API Java2D:描绘出任意的二维图形,并能设置图形的描绘出任意的二维图形,并能设置图形的线

42、条样式和填色效果,能对图形做旋转、缩放、线条样式和填色效果,能对图形做旋转、缩放、扭曲等。扭曲等。java.awtjava.awt:新增的2D API 类和接口。Graphics2D继承自 java.awt.Graphics,对形状、文本和图像的展示提供更加完善的控制。与 Graphics2D 有关的状态属性集被称为 Graphics2D 上下文。8.5 Java2D API -java.awtGraphics2D Graphics2D 的的上下文(上下文(状态属性集)状态属性集):Stroke(线条样式)Paint(填充图案)Clip(剪切路径)Transform(坐标变换)等。要绘制文本、

43、形状或图像:1)先设置 Graphics2D 上下文2)然后调用 Graphics2D 绘制方法:void draw(Shape s)void fill(Shape s)8.5 Java2D API -java.awt.geomjava.awt.geomjava.awt.geom:包含能被绘制图形的类所有的2D图形类都实现了java.awt的Shape接口,如Line2D、Rectangle2D、Arc2D、Eclipse2D、CubicCurve2D等。这些类在指定图形的尺寸时,有Float精度和Double精度两种形式的坐标。例如,Line2D.Float /Line2D外部类中的嵌套静态

44、类Float Line2D.Double /Line2D外部类中的嵌套静态类DoubleLine2D.Float(float x1,float y1,float x2,float y2)8.5 Java2D API -java.awt.geom GeneralPath类提供一组方法用于定义通用路径。GeneralPath对象的常用方法:void moveTo(double x,double y)void moveTo(double x,double y)/通过移动到指定坐标,实现增加一个点到路径中。void lineTo(double x,double y)/通过从当前坐标到新指定坐标绘制一条

45、直线到路径中。/使用通用路径画四面体:Graphics2D g2d=(Graphics2D)g float x=new float4;float y=new float4;x0=500;y0=30;/p0 x1=500;y1=130;/p1 x2=450;y2=180;/p2 x3=550;y3=180;/p3 GeneralPath tour=new GeneralPath();tour.moveTo(x0,y0);for(int i=1;ip1-p2-p3-p1-p2-p0-p3Java2D API中的包:njava.awt.font:包含用于文本布局和字体定义的类和接口。如碰撞侦测与打光

46、(highlighting)等,以及决定text的适当位置与顺序。njava.awt.color:用于颜色空间定义和颜色监视的类和接口。njava.awt.image和 java.awt.image.renderable:用于图像定义和绘制的类和接口。njava.awt.print:用于打印所有基于 Java 2D 的文本、图形和图像的类和接口。8.5 Java2D API1 1设置画笔样式设置画笔样式画笔样式:为直线和曲线指定宽度和虚线图案 设置Graphics2D 上下文中的 Stroke 属性的方法:setStroke(Stroke s)setStroke(Stroke s)1)画笔样式

47、由实现 Stroke 接口的对象定义。2)BasicStroke 对象:定义 Stroke 属性。BasicStroke的构造方法:定义的图形轮廓特性.包括:线条宽度width、线条端点样式(end caps)、线段连接样式(line joins)和短划线图案(dash)8.5.1设置 Graphics2D 上下文BasicStrokeBasicStroke类的构造方法类的构造方法 BasicStroke(float width,int cap,int join,BasicStroke(float width,int cap,int join,float miterlimit,float da

48、sh,float dash_phase)float miterlimit,float dash,float dash_phase)(1)width:画笔的线条宽度,是垂直于画笔轨迹的测量值(2)caps:线段末端的装饰.BasicStroke类的三个常量值:CAP_BUTT(端点无修饰)、CAP_ROUND(圆形端点)和 CAP_SQUARE(方形端点)。(3)join:定义两个线段汇合处的连接样式,BasicStroke类的三个常量值:JOIN_BEVEL(扁平角)、JOIN_MITER(尖角)和 JOIN_ROUND(圆角)。(4)miterlimit:对具有 JOIN_MITER 装饰的

49、线段连接点的剪裁限制。Miterlimit要=1.0f。(5)dash:短划线的尺寸和短划线之间的间距。元素0代表第一个短划线,元素1代表第一个间距。dash_phase:定义短划线图案开始位置的偏移量。从第二个参数开始的后面的各参数可逐个缺省,缺省时将采用默认值1 1设置画笔样式设置画笔样式例:使用颜色RED和线宽10.0f 画2D rectangle Graphics2D g2d=(Graphics2D)g g2d.setPaint(Color.RED);g2d.setStroke(new BasicStroke(10.0f);g2d.draw(new Rectangle2D.Double

50、(80,40,65,110);1 1设置画笔样式设置画笔样式例:例:/使用颜色使用颜色yellowyellow和线宽和线宽6.0f 6.0f 画画2D2D线线 g2d.setPaint(Color.yellow);g2d.setPaint(Color.yellow);g2d.draw(new Line2D.Double(395,30,320,150);g2d.draw(new Line2D.Double(395,30,320,150);/使用颜色使用颜色REDRED和线宽和线宽6.0f 6.0f 画画2D 2D 虚线虚线float dashes=10,6;float dashes=10,6;g

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《Java面向对象程序设计(第4版)》课件chapter08 图形和Java 2D.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|