⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jv0401.htm

📁 很不错到
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    g.drawPolygon(Poly1_x,Poly1_y, Poly1_pts);<br>
    g.fillPolygon(Poly2_x,Poly2_y, Poly2_pts);<br>
    }</p>
<p>   <IMG height=179 src="tu4-8.gif" 
width=311> </p>
<p>  图4-7 多边形的例子</p>
<p>  可以看出,边框型多边形并不自动关闭多边形的最后一条边,而仅是一段开放的折线。所以,若想画封闭的边框型多边形,不要忘了在数组的尾部再添上一个起始点的坐标。上述两个画多边形方法的第二种参数传递形式为:</p>
<p>  drawPolygon(Polygon p)<br>
    fillPolygon(Polygon p)</p>
<p>  其中Polygon是定义在java.awt中的一个类,它的构造方法也有两种不同的参数传递形式,一种与drawPolygon( )方法的第一种调用格式一样:</p>
<p>  Polygon(int xPoints[],int yPoints[],int nPoints)</p>
<p>  另一种调用格式则是创建一个空的多边形(无参数):</p>
<p>  Polygon( )</p>
<p>   那为什么要另外创建Polygon对象?生成一个空的Polygon对象又有何用呢?原来,olygon类中提供了一系列特有的方法,可以方便的进行与多边形相关的操作,象其中的ddPoint( 
  )方法可将多边形的坐标点动态地增加到Polygon对象中。如下面列出的paint( )方法所执行的结果与图4-7所示的结果是一样的。</p>
<p>  public void paint(Graphics g){<br>
    int Poly1_x[]={30,63,115,72,67};<br>
    int Poly1_y[]={40,20,95,74,106};<br>
    int Poly1_pts=Poly1_x.length;<br>
    Polygon poly1= new Polygon(Poly1_x,Poly1_y, Poly1_pts);<br>
    Polygon poly2= new Polygon();<br>
    poly2.addPoint(180,40);<br>
    poly2.addPoint(213,20);<br>
    poly2.addPoint(265,95);<br>
    poly2.addPoint(222,74);<br>
    poly2.addPoint(217,106);<br>
    g.drawPolygon(poly1);<br>
    g.fillPolygon(poly2);<br>
    }</p>
<p>   5. 椭圆</p>
<p>  在Java中绘制椭圆的方法是给出该椭圆的外接矩形作为参数,其调用格式与画普通矩形的方法相似:</p>
<p>  drawOval(int x, int y, int width, int height) //边框型风格</p>
<p>  illOval(int x, int y, int width, int height) //填充型风格</p>
<p>  这里要特别注意:x和y不是椭圆的圆心坐标,而是该椭圆外接矩形的左上角。因此,椭圆时,把它先看作是一个矩形将有助于在坐标系统中定位。另外,Graphics类不专门提供画圆的方法,而只需将width与height参数置成相等就可以了。例如,下面的paint( 
  )方法,画出一个圆和一个用颜色填充的椭圆,其显示效果如图4-8所示。</p>
<p>  public void paint(Graphics g){<br>
    g.drawOval(30,20,60,60);<br>
    g.fillOval(130,20,80,60);<br>
    }</p>
<p>   <IMG 
height=165 src="tu4-9.gif" width=259> </p>
<p>  图4-8 椭圆的例子</p>
<p>   6. 画弧</p>
<p>  弧是椭圆的一部分,因而画弧的方法就相当于先画一个椭圆,而后取该椭圆中所需要一部分。它们的调用格式如下:</p>
<p>  drawArc(int x, int y, int width, int height,int startAngle, int arcAngle) 
  //边框型风格</p>
<p>  fillArc(int x, int y, int width, int height,int startAngle, int arcAngle) 
  //填充型风格</p>
<p>  其中前四个参数的含义与画椭圆一样,因此也必须用矩形的观点来确定弧在坐标系统的位置。后两个参数就是用来定义椭圆的一部分:startAngle参数表示该弧从什么角度开始,arcAngle参数表示从startAngle开始转了多少度。如图4-9的弧度坐标系所示,水平向右表示0度,逆时钟方向为正角度值,顺时钟方向为负角度值。</p>
<p>   <IMG 
height=354 src="tu4-10.gif" width=431> </p>
<p>  图4-9 弧度坐标系</p>
<p>  如果startAngle和arcAngle中有任一值大于360度的话,都会被转换为0到360度之间的值。因此若要画满整个椭圆,arcAngle需设为360的整数倍,若设为370度则相当于只画了10度。另外fillArc( 
  )方法的效果并不是填充弧的两个端点直接连线所围的区域,而是填充弧的两端点与圆心连线所围的扇形区域,象一个饼图。下面的paint( )方法画了图4-9中的几段弧,其显示效果如图4-10所示。</p>
<p>  public void paint(Graphics g){<br>
    g.drawArc(10,20,100,60,35,65);<br>
    g.drawArc(110,20,100,60,35,-140);<br>
    g.fillArc(210,20,100,60,35,65);<br>
    g.fillArc(310,20,100,60,35,-140);<br>
    }</p>
<p>   <IMG 
height=127 src="tu4-11.gif" width=480> </p>
<p>  图4-10 弧的例子</p>
<p>  7.复制与清除图形</p>
<p>  当我们需要在屏幕上重复绘制一些相同的图形时,也可采用Graphics类中的copyArea( )法,它能将屏幕上某一矩形区域里的内容复制到屏幕的另一区域。其调用格式如下:</p>
<p>  copyArea(int x, int y, int width, int height, int dx, int dy)</p>
<p>  前四个参数我们应该是相当熟悉了,它定义了要被复制的屏幕的矩形区域。最后两个数则表示新区域与原始屏幕区域的偏移距离:若dx,dy为正值,则表示新区域相对于原域的右方及下方所偏移的像素值;反之,它们取负值则分别表示相对左方及上方的偏移量。</p>
<p>   若要清除屏幕的某一矩形区域所画的内容,就要选用clearRect( )方法,它用当前的背景颜色来填充整个矩形区域。其调用格式为:clearRect(int 
  x, int y, int width, int height)可以看出这四个参数定义了所要清除的矩形区域。例如,想要清除整个applet区域,可先调用Applet类的size( 
  )方法得到整个applet的宽度和高度(该方法没有参数,返回值是一个Dimension对象,该对象具有width和height实例变量),再调用clearRect( 
  )方法就可以了:</p>
<p>  g.clearRect(0, 0, size( ).width, size( ).height);</p>
<p>  <a name="412"></a>4.1.2 文本与字体</p>
<p>  Graphics类也提供了在屏幕上显示文本的方法,但若要使文本的显示更具特色,让它满足某种字体、某种风格及尺寸大小的要求,就需要用字体类Font来定义。</p>
<p>  1. 设置文本信息</p>
<p>  当我们想要在屏幕上输出文本信息时,首先要确定的就是采用何种字体,例如中文的“宋体”、“楷体”,或是英文的“TimesRoman”体、“Courier”体等等,接着再决定该字体输出时采用哪种风格,是斜体型还是粗体型等等,最后还要确定该字体的大小尺寸。所有这些都由Font类来定义,我们不难猜出其构造方法的调用格式:</p>
<p>  Font(String name, int style, int size)</p>
<p>  不错,它的三个参数就是我们先前所说的字体名、字体风格和尺寸大小。并且Font类中已定义了类变量来表示字体的style值,如Font.BOLD(表示粗体)、Font.ITALIC(表示斜体)、Font.PLAIN(表示普通体)。由于它们被定义为整数常量,因此可以进行相加运算来生成复合style,例如想让style即是粗体又是斜体,可以这样写:</p>
<p>  Font fn = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 28);</p>
<p>  虽然我们定义了所需的字体,但其显示结果有时也并非如愿。因为运行该applet的客户端系统有可能并未安装该字体,这时Java就会以缺省字体来替代它。因此,不妨先查看一下客户端系统目前究竟支持哪些字体,这就要用到java.awt.Toolkit类中的getFontlist( 
  )方法,它返回系统目前可用的字体列表,然后就可决定到底选用哪种字体。例如:</p>
<p>  Toolkit systk = Toolkit.getDefaultToolkit( );<br>
    tring fonts = systk.getFontList( );</p>
<p>  2. 显示文本</p>
<p>  创建了Font对象以后,我们就可以利用Graphics类中提供的drawString( )、drawChars( )等方法来显示字符串与字符。当然,首先还要用setFont( 
  )方法,将所创建的Font对象设为当前所用的字体。下面就是Graphics类中这三个方法的调用格式:</p>
<p>  setFont(Font font);<br>
    drawString(String str, int x, int y)<br>
    drawChars(char data[], int offset, int length, int x, int y)</p>
<p>  其中setFont( )方法的参数就是一个创建好的Font对象,表明系统当前选用哪个Font对象所定义的字体信息。drawString( )方法中的str即是要显示的字符串,x,y指明字符串显示的起始位置坐标,具体的说,x表示第一个字符的左边界,y表示整个字符串的基线(baseline,见图4-12)位置坐标。因此,这里的坐标并不是通常意义上的矩形区域的左上角。drawChars( 
  )方法则是用来显示多个字符的,也就是从给定的字符数组中抽取连续的一部分显示在屏幕上。其中data参数就是给定的原始字符数组,offset表示从第几个字符位置开始显示,length表示共显示几个字符,x与y参数的含义与drawString( 
  )方法一样,代表显示在屏幕上的起始位置。</p>
<p>  如下面的程序显示了一些不同的文本字体,其显示结果如图4-11所示。</p>
<p>  import java.awt.Graphics;<br>
    import java.awt.Font;<br>
    public class Fonts extends java.applet.Applet{<br>
    public void paint(Graphics g){<br>
    Font ftp20 = new Font("TimesRoman",Font.PLAIN,20);<br>
    Font fai15 = new Font("Arial",Font.ITALIC,15);<br>
    Font fcb24 = new Font("Courier",Font.BOLD,24);<br>
    Font fsib30 = new Font("宋体",Font.ITALIC+Font.BOLD,30);<br>
    g.setFont(ftp20);<br>
    g.drawString("Font name TimesRoman , style plain , size 20",10,20);<br>
    g.setFont(fai15);<br>
    g.drawString("Font name Arial , style italic , size 15",10,50);<br>
    g.setFont(fcb24);<br>
    g.drawString("Font name Courier , style bold , size 24",10,80);<br>
    g.setFont(fsib30);<br>
    g.drawString("字体名 宋体,风格 斜体+粗体,尺寸 30",10,120);<br>
    }<br>
    }</p>
<p>   <IMG height=158 src="tu4-12.gif" width=472> </p>
<p>  图4-11 各种字体的例子</p>
<p>  3. 获取字体信息</p>
<p>  (1)获取基本信息</p>
<p>  如果不清楚系统当前所用的字体信息,可以先调用Graphics类中的getFont( )方法,该方法无参数,它返回系统当前所用的Font对象,然后就可以调用Font类中提供的几个方法来获取该字体的基本信息。表4-1列出了Font类中的这些方法。</p>
<p>  表4-1 Font类提供的一些主要方法</p>
<p>  (2)获取详细信息</p>
<p>  有时候,我们为了在屏幕上更精确地定位文本,还需要了解所选字体的更详细的信息,例如整个字符串到底有多高,有多宽,两行字符串的间隙有多少等等。这时,我们需要用到一个新的类FontMetrics来提供这一信息。我们可以调用Graphics类中的getFontMetrics( 
  )方法来获取关于当前字体的FontMetrics对象(该方法也无参数)。然后就可以利用表4-2所示的FontMetrics类中所提供的方法来获取更详细的字体信息。图4-12中给出了字体中关于Ascent、Descent、Leading等概念的示意图。</p>
<p>  <a name="413"></a>4.1.3 颜色的设置</p>
<p>  现在,让我们改变一下总是在灰色背景上用黑色绘图以及显示文本的习惯,而给我们的applet增添一些五彩缤纷的色彩。与设置字体信息相似,要设置新的颜色,必须先创建Color对象,然后再调用Graphics类中设置颜色的方法来将生成的Color对象设为当前所用的绘图颜色。</p>
<p>   <IMG 
height=115 src="4-13.gif" width=500> </p>
<p>  图4-12字体</p>
<p>  1. 创建Color类</p>
<p>  Java中每一种颜色都看成是由红(R)、绿(G)、蓝(B)三原色组合而成的。因此Color类的构造方法采用如下格式:</p>
<p>  Color(int r, int g, int b)</p>
<p>  其中每个参数的值都在0到255之间,数值越大就表明这种颜色的成份越重。例如(0,0,0)代表黑色,(255,0,0)代表红色。当然最终在屏幕上是否能显示所定义的颜色还取决于客户端系统的调色板所支持的颜色种类的多少。若客户端系统的调色板并不支持当前所定义的颜色值,就会在调色板中挑选最接近的颜色来代替。</p>
<p>  Color类中还定义了一些标准颜色的Color对象存储在类变量中,使的这些标准颜色的引用显得更为方便。这些类变量如表4-3所示。</p>
<p>  2. 设置当前颜色</p>
<p>  为了能使用刚才生成好的Color对象来显示文本及绘制图形,还需调用Graphics类中的setColor( )方法把这个对象设置为系统当前所用的绘画颜色,其调用格式为:</p>
<p>  setColor(Color c)</p>
<p>  例如,想要用蓝色来显示文本,最简单的办法是直接引用标准色的类变量:</p>
<p>  setColor(Color.blue);</p>
<p>  另外,Java还提供了设置整个applet的背景和前景的方法,它们分别是setBackground( )方法和setForeground( )方法,它们都被定义在java.awt.Component类中,因此该方法能被其子类(包括Applet类及Applet类的子类)自动继承,它们的调用格式与setColor( 
  )方法一样:</p>
<p>  setBackground(Color c)<br>
    setForeground(Color c)</p>
<p>  其中setForeground( )方法将影响到applet中所有已经用其它任何颜色所绘制的图形显示的文本,把它们一下子都变为该方法所定义的前景颜色,而不需用该颜色重新一一绘制。有“set”必有相应的“get”,Java中还提供了getColor( 
  )方法(Graphics类中)、getBackground( )方法和getForeground( )方法(Component类中)来分别获取当前的绘图颜色、applet背景及前景颜色的对象。</p>
<p>  下面,我们写一段程序来显示一排用随机定义的颜色所填充的小方块,它们的显示效果如图4-13所示。</p>
<p>  import java.awt.Graphics;<br>
    mport java.awt.Color;<br>
    public class Colors extends java.applet.Applet{<br>
    public void paint(Graphics g){<br>
    int red,green,blue;<br>
    for (inti=10;i&lt;400;i+=40){<br>
    red = (int)Math.floor(Math.random()*256);<br>
    green = (int)Math.floor(Math.random()*256);<br>
    blue = (int)Math.floor(Math.random()*256);<br>
    g.setColor(new Color(red,green,blue));<br>
    g.fillRect(i,20,30,30);<br>
    }<br>
    }<br>
    }</p>
<p>  <IMG 
height=126 src="tu4-14.gif" width=427> </p>
<p>   图4-13 使用绘图颜色的例子。</p>
<p>&nbsp;</p>
</BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -