第 6章 图形处理
6.1 Java图形处理概述
6.2 基本图形的输出
6.3 设置图形的颜色
6.4 文字的图形化输出
6.1 Java图形处理概述
Java系统及应用程序是如何实现图形功能的呢?首先,Java系统在 AWT构件类的根类 Component类中预置了一种称作
Paint( Graphics g) 的方法,该方法的参数是一个图形类对象 Graphics g,通常它是由系统自动生成而不是由用户程序来实例化的,在类 Graphics中系统预置了大量的用于图形处理与输出的方法,
在 Paint()方法的重新定义中,可以通过 Graphics的对象 g来调用这些方法进行图形处理与输出。特别注意的是 Paint()方法的调用是由程序运行的环境而不是程序本身来完成的,每当一个 AWT构件首次显示或在部分显示已被破坏而必须刷新时该方法被自动地调用。显示的破坏可能发生在任何时刻,因此,你的程序必须能在任意时刻更新显示。
6.2 基本图形的输出
6.2.1 直线的输出在 Graphics类中使用 drawLine*()方法画一条线段,其调用格式如下:
drawLine(int x1,int y1,int x2,int y2)
6.2.2 矩形的输出
Graphics类中提供了 3种类型的矩形:
普通矩形,圆角矩形和三维矩形 。 每一种矩形都提供两种不同风格的方法:一种是仅画出矩形的边框;另一种是不仅画出边框,并且还用相同的颜色将整个矩形区域填满 。 画矩形的方法如下 。
( 1) drawRect( int x,int y,int
width,int) 画出普通矩形,参数 x和 y是矩形左上角顶点坐标,而参数 width和
height表示所画矩形的宽和高。
( 2) fillRect( int x,int y,int width,
int height) 画出一个填充型风格的普通矩形。
( 3) drawRoundRect( int x,int y,
int width,int height,int arcWidth,int
arcHeight) 画出一个圆角矩形,参数中除了具有和普通矩形含义相同的前 4个参数外,还增加了两个用来描述圆角性质的参数。其中 arcWidth代表了圆角弧的横向直径; arcHeight代表了圆角弧的纵向直径。
这两个参数的值越大,圆角越大,反之则越小。
( 4) fillRoundRect( int x,int y,int
width,int height,int arcWidth,int
arcHeight) 画填充型的圆角矩形。
( 5) draw3DRect( int x,int y,int
width,int height,boolean raised) 画三维矩形,其中前 4个参数意义同前,第 5个参数 raised定义该立体矩形是具有凸出(值为 true) 还是凹下(值为 false) 的效果。
( 6) fill3DRect( int x,int y,
int width,int height,boolean raised)
画填充型三维矩形 。
6.2.3 椭圆,圆及圆弧的输出
1,画椭圆和圆在 Java中绘制椭圆是以其外接矩形作为参数来实现的,其调用格式与画普通矩形的方法相似 。
( 1) drawOval( int x,int y,int
width,int height) 绘制一个椭圆,前两个参数为该椭圆外接矩形的左上顶点,后两个参数为其外接矩形的宽和高,当后两个参数的值相等时为圆。
( 2) fillOval( int x,int y,int width,
int height) 绘制椭圆并将其内部用前景色填充。
2.画弧及扇形弧是椭圆或圆的一部分,因而画弧的方法就相当于先画一个椭圆,而后取该椭圆中所需要的一部分。其调用格式如下。
( 1 ) drawArc( int x,int y,int
width,int height,int startAngle,int
arcAngle) 画一段弧,其前 4个参数的含义与画椭圆一样,它确定了弧所在的椭圆的大小及位置,第 5个参数 startAngle表示该弧开始位置的角度,第 6个参数 arcAngle
表示该弧转过的角度 。 角度的参照系统规定水平向右为 0°,逆时钟方向为正角度值,
顺时钟方向为负角度值 。 如图 6-5所示 。
图 6-5
( 2) fillArc( int x,int y,int width,
int height,int startAngle,int arcAngle)
画一段弧并且用前景色填充该弧所包含的扇形区域,实际上这等于画了一个扇形 。
6.2.4 多边形的输出在 Java中画多边形是用其各个顶点的坐标作为参数,并依次画出连接各个顶点的线段 。 画一个多边形的方法依照传递参数的方式不同可分为使用数组传递参数和使用 Polygon对象传递参数两类 。
1.使用数组传递参数
( 1) drawPolygon( int xPoints[],
int yPoints[],int nPoints) 画一个非填充型的多边形,其中 xPoints参数是一个整数数组,用以存放多边形坐标点的 x坐标值,
yPoints参数存放相应的一组 y坐标值,
nPoints则表示共有几个坐标点。
( 2) fillPolygon( int xPoints[],int
yPoints[],int nPoints) 画一个填充型的多边形,其他同上。
2,使用 Polygon对象传递参数在上面介绍的画非填充型和填充型多边形方法中使用对象传递参数的形式为:
( 1) drawPolygon( Polygon p)
( 2) fillPolygon( Polygon p)
6.3 设置图形的颜色
6.3.1 创建 Color类
Java 中每 一种颜 色都看成 是由红
( R),绿 ( G),蓝 ( B) 3原色组合而成的 。 因此 Color类的构造方法采用如下格式 。
( 1) Color( int r,int g,int b) 其中每个参数的值都在 0~ 255之间,数值越大就表明这种颜色的成份越重 。
例如( 0,0,0)代表黑色,( 255,0,
0)代表红色。当然最终在屏幕上是否能显示所定义的颜色还取决于客户端系统的调色板所支持的颜色种类的多少。若客户端系统的调色板并不支持当前所定义的颜色值,就会在调色板中挑选最接近的颜色来代替。
( 2) Color( int rgb) 指定一个整型数表示 3原色的混合值。其中 rgb作为二进制数的 16~ 23位的值代表红色,8~ 15位代表绿色,0~ 7位代表蓝色。
6.3.2 设置当前颜色为了能使用刚才生成好的 Color对象来显示文本及绘制图形,需调用 Graphics
类中的 setColor()方法把这个对象设置为系统当前所用的绘画颜色,其调用格式为:
setColor(Color c);
例如,想要用蓝色来显示文本,最简单的办法是直接引用标准色的类变量:
setColor(Color.blue);
另外,Java还提供了设置构件背景和前景的方法,分别是 setBackground()方法和 setForeground()方法,它们都被定义在
java.awt.Component类中,因此该方法能被其子类自动继承,其调用格式与
setColor()方法相同:
setBackground(Color c)
setForeground(Color c)
其中 setForeground()方法将影响到容器构件中所有已经用其他任何颜色所绘制的图形及显示的文本,把它们一下子都变为该方法所定义的前景颜色,而不需用该颜色重新一一绘制。
有,set”必有相应的,get”,Java中还提供了 getColor()方法( Graphics类中)、
getBackground()方法和 getForeground()方法( Component类中)来分别获取当前的绘图颜色、构件背景及前景颜色的对象。
6.4 文字的图形化输出
6.4.1 Font类在 Java中提供了一个 font类,利用它可以定义文本的字体,风格及字号 ( 大小 ),其构造方法如下:
Font(String name,int style,int size)
其中第 1个参数 name为字体名称,如中文的,宋体,,,楷体,,或是英文的
,TimesRoman”体,,Courier”体等;第 3
个参数 size表示字体的大小;第 2个参数
style表示字体的风格,Font类中已定义了类 变 量 来 表 示 字 体 的 style 值,如
Font.BOLD( 表示粗体 ),Font.ITALIC
( 表示斜体 ),Font.PLAIN( 表示普通体 ) 。
由于它们被定义为整数常量,因此可以进行相加运算来生成复合 style,例如想让 style即是粗体又是斜体,可以这样写:
Font fn = new Font("TimesRoman",
Font.BOLD+Font.ITALIC,28);
如果定义的字体不存在,系统就会以缺省字体来替代它 。 在使用字体之前,不妨先查看一下系统目前究竟支持哪些字体,
这 就 要 用 到 java.awt.Toolkit 类中的
getFontlist()方法,它返回系统目前可用的字体列表,然后就可决定到底选用哪种字体 。 例如:
Toolkit systk =
Toolkit.getDefaultToolkit();
String fonts = systk.getFontList();
创建了 Font对象以后,还要用 setFont
( Font font) 方法将所创建的 Font对象设为当前所用的字体。然后就可以利用
Graphics类中提供的 drawString()、
drawChars()等方法来显示字符串与字符。
6.4.2 文本的显示与输出文本的图形化输出使用 Graphics类中提供的 drawString(),drawChars()方法,
其调用格式如下。
( 1) drawString( String str,int x,
int y) 其中的第一个参数 str即是要显示的字符串,后面两个参数 x,y指明字符串显示的起始位置坐标,具体的说,x表示第一个字符的左边界,y表示整个字符串的基线。
( 2 ) drawChars( char data[],int
offset,int length,int x,int y)
drawChars()方法用来显示多个字符,也就是从给定的字符数组中抽取连续的一部分显示在屏幕上 。 其中 data参数就是给定的原始字符数组,offset表示从第几个字符位置开始显示,length表示共显示几个字符,
x与 y参数的含义与 drawString()方法一样,
代表显示在屏幕上的起始位置 。 注意该方法与 drawString()的区别是所显示内容的数据类型不同 。