您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第7章Java图形处理和Java2D
第7章Java图形处理和Java2DJava语言的类库中提供了丰富的绘图方法,其中大部分对图形、文本、图像的操作方法都定义在Graphics类中,Graphics类是java.awt程序包的一部分。本章介绍的内容包括了颜色、字体处理、基本图形绘制方法、文本处理以及Java2D中Graphics2D提供的基本图形绘制和图形特殊效果处理等方面的内容。7.1Java图形坐标系统和图形上下文要将图形在屏幕上绘制出来,必须有一个精确的图形坐标系统来给该图形定位。与大多数其他计算机图形系统所采用的二维坐标系统一样,Java的坐标原点(0,0)位于屏幕的左上角,坐标度量以象素为单位,水平向右为X轴的正方向,竖直向下为Y轴的正方向,每个坐标点的值表示屏幕上的一个像素点的位置,所有坐标点的值都取整数,如图7-1所示。这种坐标系统与传统坐标系统(如图7-2所示)有所不同。在屏幕上绘制图形时,所有输出都是通过一个图形上下文(graphicscontext)来产生。图形上下文有时也称为图形环境,指允许用户在屏幕上绘制图形的信息,它由Graphics类封装,可以通过Component类的getGraphics()方法返回获得。图形上下文表示一个绘制图层,如组件的显示区、打印机上的一页、或一个屏幕外图像缓冲区。它提供了绘制三种图形对象(形状、文本和图像)的方法。在Java中,可以通过Graphics的对象对图形上下文进行管理,Graphics类定义了多种绘图函数,用户可以通过其提供的函数实现不同的图形绘制和处理。7.2Color类可以使用java.awt.Color类为绘制的图形设置颜色。Color类使用了sRGB(standardRGB,即标准RGB)颜色空间来表示颜色值。颜色由红(R)、绿(G)、蓝(B)三原色构成,每种原色的强度用一个byte值表示,每种原色取值从0(最暗)~255(最亮),可以根据这三种颜色值的不同组合,显示不同的颜色效果,如(0,0,0)表示黑色,(255,255,255)表示白色。在Java中Color类定义了13种颜色常量供用户使用,它们分别为:Color.black、Color.blue、x轴y轴(0,0)xy(x,y)图7-1Java坐标系统图7-2传统坐标系统(0,0)x轴(x,y)xyy轴Color.cyanColor.darkGray、Color.gray、Color.green、Color.lightGray、Color.magenta、Color.orange、Color.pink、Color.red、Color.white和Color.yellow。从JDK1.4开始,也可以使用Color类中定义的新常量,它们和上述颜色常量一一对应,分别为:Color.BLACK、Color.BLUE、Color.CYAN、Color.DARK_GRAY、Color.GRAY、Color.GREEN、Color.LIGHT_GRAY、Color.MAGENTA、Color.ORANGE、Color.PINK、Color.RED、Color.WHITE和Color.YELLOW。除此之外,用户也可以通过Color类提供的构造函数Color(intr,intg,intb)创建自己需要的颜色。该构造函数通过指定红、绿、蓝三种颜色的值来创建一个新的颜色,参数r、g、b的取值范围为0~255。如:Colorcolor=newColor(255,0,255);一旦用户生成了自己需要的颜色,就可以通过java.awt.Component类中的setBackground(Colorc)和setForeground(Colorc)方法来设置组件的背景色和前景色,也可以使用该颜色作为当前的绘图颜色。7.3Font类和FontMetrics类7.3.1Font类可以使用java.awt.Font类创建字体对象。Java提供了物理字体和逻辑字体两种字体。AWT定义了5种逻辑字体,分别为SansSerif、Serif、Monospaced、Dialog或DialogInpu。Font类的构造函数为:Font(Stringname,intstyle,intsize);其中参数name为字体名,可以设置为系统上可用的任一字体,如SansSerif、Serif、Monospaced、Dialog或DialogInput等;参数style为字型,可以设置为Font.PLAIN、Font.BOLD、Font.ITALIC或Font.BOLD+Font.ITALIC等;参数size为字号,其取值为正整数。如:Fontfont=newFont(“Serif”,Font.ITALIC,10);如果需要找到系统上的所有可用字体,可以通过创建java.awt.GraphicsEnviroment类的静态方法getLocalGraphicsEnviroment()的实例,调用GetAllFonts()方法来获得系统的所有可用字体,或通过getAvailableFontFamilyName()方法来取得可用字体的名字。如:在生成可用的字体对象后,可以通过java.awt.Component类中的setFont(Fontf)方法设置组件的字体。例7.1在控制台下输出系统所有的可用字体。程序源代码见ShowAvaliableFont.java,程序运行结果见图7-3。//ShowAvaliableFont.javaimportjava.awt.*;publicclassShowAvaliableFont{publicstaticvoidmain(String[]args){GraphicsEnvironmente=GraphicsEnvironment.getLocalGraphicsEnvironment();String[]fontNames=e.getAvailableFontFamilyNames();//获得可用字体名称intj=0;for(inti=0;ifontNames.length;i++){System.out.printf(%25s,fontNames[i]);j++;if(j%3==0)System.out.println();}}}图7-3例7.1运行结果7.3.2FontMetrics类使用drawString(Strings,intx,inty)方法我们可以指定在框架的(x,y)位置开始显示字符串,但是如果想在框架的中央显示字符串,需要使用FontMetrics类。FontMetrics类是一个抽象类,要使用FontMetrics对象,可以通过调用Graphics类中的getFontMetrics()方法。FontMetrics定义字体的度量,给出了关于在特定的组件上描绘特定字体的信息。这些字体信息包括了ascent(上升量)、descent(下降量)、leading(前导宽度)和height(高度)。其中leading用于描述两行文本间的间距,见图7-4。图7-4字体信息示意图FontMetrics类提供了下面几种方法用于获取ascent、descent、leading和height:intgetAscent();//取得由当前FontMetrics对象描述的字体的ascent值intgetDescent();//取得由当前FontMetrics对象描述的字体的descent值intgetLeading();//取得由当前FontMetrics对象描述的字体的leading值intgetHeight();//取得使用当前字体的一行文本的标准高度例7.2在框架中央位置显示字符串“JavaProgramming”,并将字体设置为Serif、粗斜体、大小为30,颜色为红色,而将框架背景设置为淡灰色。程序源代码见FontMetricsDemo.java,程序运行结果见图7-5。//FontMetricsDemo.javaimportjava.awt.*;importjavax.swing.JFrame;publicclassFontMetricsDemoextendsJFrame{publicFontMetricsDemo(){super();setTitle(FontMetricsDemo);setSize(300,200);setVisible(true);}publicvoidpaint(Graphicsg){Fontfont=newFont(Serif,Font.BOLD+Font.ITALIC,30);//建立字体g.setFont(font);//设置当前使用字体setBackground(Color.LIGHT_GRAY);//设置框架的背景颜色g.setColor(Color.RED);FontMetricsf=g.getFontMetrics();//建立FontMetrics对象intwidth=f.stringWidth(JavaProgramming);//取得字符串的宽度intascent=f.getAscent();//取得当前使用字体的ascent值intdescent=f.getDescent();//取得当前使用字体的descent值intx=(getWidth()-width)/2;inty=(getHeight()+ascent)/2;g.drawString(JavaProgramming,x,y);}publicstaticvoidmain(String[]args){FontMetricsDemofmd=newFontMetricsDemo();fmd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}图7-5例7.2运行结果7.4常用的绘图方法7.4.1绘制直线在Java中可以使用下面方法绘制一条直线:drawLine(intx1,inty1,intx2,inty2);其中参数x1、y1、x2、y2分别表示该直线的起点(x1,y1)和终点(x2,y2)的坐标值。7.4.2绘制矩形Java中提供了绘制空心矩形(只绘制矩形的轮廓)和填充矩形的方法,分别针对普通直角矩形、圆角矩形和三维矩形有不同的绘制方法。(1)普通直角矩形可以使用下面方法绘制普通直角矩形的轮廓:drawRect(intx,inty,intwidth,intheight);若需要绘制一个有填充颜色的普通直角矩形,可以使用下面方法:fillRect(intx,inty,intwidth,intheight);这两种方法的参数含义相同,x、y分别表示矩形左上角的x坐标和y坐标,width、height分别表示矩形的宽和高。(2)圆角矩形可以使用下面方法绘制圆角矩形的轮廓:drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight);若需要绘制一个有填充颜色的圆角矩形,可以使用下面方法:fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight);这两种方法的参数含义相同,x、y分别表示矩形左上角的x坐标和y坐标,width、height分别表示矩形的宽和高,参数arcWidth和arcHeight分别表示圆角弧的水平直径和竖直直径,如图7-6所示。(3)三维矩形可以使用下面方法绘制三维矩形的轮廓:draw3DRect(intx,inty,intwidth,intheight,booleanraised);若需要绘制一个有填充颜色的三维矩形,可以使用下面方法:fill3DRect(intx,inty,intwidth,intheight,booleanraised);这两种方法的参数含义相同,x、y分别表示矩形左上角的x坐标和y坐标,width、height分别表示矩形的宽和高,raised为真(True)表示矩形从表面凸起,ra
本文标题:第7章Java图形处理和Java2D
链接地址:https://www.777doc.com/doc-2198199 .html