Java2实用教程(第二版)程序代码——第十七章 Java与图形

  1//例子1
  2import java.applet.*;import java.awt.*;
  3public class Example17_1 extends Applet 
  4{  public void paint(Graphics g)
  5   {  int y,x=120;
  6      g.drawString("计算机科学技术",10,20);
  7      g.drawString("I Love This Game",20,40);
  8      char a[]="中国科学技术大学".toCharArray();
  9      for(int i=0;i<a.length;i++)
 10        {  y=2*x-200;
 11           g.drawChars(a,i,1,x,y);
 12           x=x+6;
 13        }

 14   }

 15}

 16
 17//例子2
 18import java.applet.*;import java.awt.*;
 19public class Example17_2 extends Applet
 20{  public void paint(Graphics g)
 21   {  int gap=0;
 22      for(int i=1;i<=10;i++)
 23       {  g.drawLine(10,10+5*i,180,10+5*i);
 24        }

 25      for(int i=1;i<=8;i++)
 26       {  g.drawLine(40+3*i,70,40+3*i,150);
 27       }

 28      g.drawLine(64,70,150,156);
 29   }

 30}

 31
 32//例子3
 33import java.applet.*;import java.awt.*;
 34public class Example17_3 extends Applet
 35{  public void paint(Graphics g)
 36   {g.drawRect(24,22,60,34);    
 37       g.drawRoundRect(10,10,90,60,50,30);
 38       g.setColor(Color.cyan);
 39       g.fillOval(10,80,120,60);
 40       int k=0;
 41      for(int i=1;i<=8;i++)
 42        {  Color c=new Color(i*32-1,0,0);
 43           g.setColor(c); k=k+5;
 44           g.drawOval(160+k,77+k,120-2*k,80-2*k);
 45        }

 46   }

 47}

 48
 49//例子4
 50import java.applet.*;import java.awt.*;
 51public class Example17_4 extends Applet 
 52{  public void paint(Graphics g)
 53    {  g.drawArc(0,40,100,50,0,180);
 54      g.drawArc(100,40,100,50,180,180);
 55      g.setColor(Color.blue);
 56      g.fillArc(0,100,40,40,0,270);
 57      g.setColor(Color.green);
 58      g.drawArc(55,120,120,60,-90,270);
 59   }
      
 60}

 61
 62//例子5
 63import java.applet.*;
 64import java.awt.*;
 65public class Example17_5 extends Applet 
 66{  int px1[]={40,80,0,40};
 67   int py1[]={545,45,5}
 68   int px2[]={140,180,180,140,100,100,};
 69   int py2[]={5,  25,  45654525,};
 70   public void paint(Graphics g)
 71    {  g.drawPolygon(px1,py1,4);//从点(40,5)画到点(80,45),再从点(80,45)画到点(0,45)。
 72       g.drawPolygon(px2,py2,6);
 73   }

 74}

 75
 76//例子6
 77import java.applet.*; import java.awt.*;
 78public class Example17_6  extends Applet
 79{  Font f1=new Font("Helvetica",Font.PLAIN,28);
 80   Font f2=new Font("Helvetica",Font.BOLD,15);
 81   Font f3=new Font("Courier",Font.PLAIN,12);
 82   Font f4=
 83   new Font("TimesRoman",Font.BOLD+Font.ITALIC,18);
 84   public void paint(Graphics g)
 85    {  g.setFont(f1);
 86      g.drawString("28pt plain Helvetica",5,20);
 87      g.setFont(f2);
 88      g.drawString("15pt bold Helvetica",5,43);
 89      g.setFont(f3); 
 90      g.drawString("12pt plain courier",5,75);
 91      g.setFont(f4);
 92      g.drawString("18pt bold & italic Times Roman",5,92);
 93   }

 94}

 95
 96//例子7
 97import java.applet.*;import java.awt.*;
 98public class Example17_7 extends Applet
 99{  public void init()
100   {  setBackground(Color.yellow); 
101   }

102   public void paint(Graphics g)
103   {  g.setColor(Color.red);
104      g.fillOval(10,10,100,100);
105      g.clearRect(40,40,40,40); 
106   }

107}
 
108
109//例子8
110import java.applet.*;import java.awt.*;
111import java.awt.event.*;
112public class Example17_8 extends Applet
113{  int i=0;
114   public void paint(Graphics g)
115   {  i=(i+2)%360;
116      Color c=new Color((3*i)%255,(7*i)%255,(11*i)%255);
117      g.setColor(c); g.fillArc(30,50,120,100,i,2);
118      g.fillArc(30,152,120,100,i,2);
119      try{  //程序暂停300毫秒,再执行repaint()(见19章):
120            Thread.sleep(300);
121         }

122      catch(InterruptedException e){}
123      repaint(); 
124   }

125   public void update(Graphics g)
126   {  g.clearRect(30,152,120,100); 
127      paint(g);
128   }

129}

130
131//例子9
132import java.awt.*; import java.applet.*;
133import java.awt.geom.*;
134public class Example17_9 extends Applet
135{  public void paint(Graphics g)
136{  g.setColor(Color.red);
137  Graphics2D g_2d=(Graphics2D)g;  
138      Line2D line=new Line2D.Double(2,2,300,300); 
139      g_2d.draw(line);
140      for(int i=1,k=1;i<=10;i++)
141         {  line.setLine(10,10+k,80,10+k);
142            g_2d.draw(line); k=k+3;
143         }
   
144   }

145}

146
147//例子10
148import java.awt.*; import java.applet.*;
149import java.awt.geom.*;
150public class Example17_10 extends Applet
151{  public void paint(Graphics g)
152    {  g.setColor(Color.blue) ;
153      Graphics2D g_2d=(Graphics2D)g;
154      Rectangle2D rect=
155      new Rectangle2D. Double (20,30,30,30); 
156      g_2d.draw(rect);
157      for(int i=1;i<=5;i++)
158        {  rect.setRect(12,12+i,50,80);
159           g_2d.draw(rect);
160        }

161   }

162}

163
164//例子11
165import java.awt.*;import java.applet.*;
166import java.awt.geom.*
167public class Example17_11 extends Applet
168{  public void paint(Graphics g)
169   {  g.setColor(Color.blue) ;
170      Graphics2D g_2d=(Graphics2D)g;
171      Ellipse2D ellipse=
172      new Ellipse2D. Double (20,30,100,50); 
173      g_2d.draw(ellipse);
174      for(int i=1,k=0;i<=6;i++)
175        {  ellipse.setFrame(20+k,30,100-2*k,50);
176           g_2d.draw(ellipse); k=k+5;
177        }
 
178   }

179}

180
181//例子12
182import java.awt.*; import java.applet.*;
183import java.awt.geom.*;
184public class Example17_12 extends Applet 
185{  public void paint(Graphics g)
186   {  g.setColor(Color.red) ;
187      Graphics2D g_2d=(Graphics2D)g;
188      Arc2D arc=
189      new Arc2D.Double (2,30,80,55,180,-90,Arc2D.OPEN);
190      g_2d.draw(arc);
191      arc.setArc(90,30,90,70,0,180,Arc2D.CHORD); 
192      g_2d.draw(arc);
193      arc.setArc(190,30,50,90,0,270,Arc2D.PIE); 
194      g_2d.draw(arc);
195   }

196}

197
198//例子13
199import java.awt.*;import java.applet.*;
200import java.awt.geom.*;
201public class Example17_13 extends Applet
202{  public void paint(Graphics g)
203   {  g.setColor(Color.red) ;
204      Graphics2D g_2d=(Graphics2D)g;
205      QuadCurve2D quadCurve=
206      new  QuadCurve2D.Double(2,10,51,90,100,10);
207      g_2d.draw(quadCurve);
208      quadCurve.setCurve(2,100,51,10,100,100);
209      g_2d.draw(quadCurve);
210   }

211}

212
213//例子14
214import java.awt.*;import java.applet.*;
215import java.awt.geom.*;
216public class Example17_14  extends Applet
217{  public void paint(Graphics g)
218   {  g.setColor(Color.red) ;
219      Graphics2D g_2d=(Graphics2D)g;
220      CubicCurve2D curve_1=new  CubicCurve2D.Double(2,30,80,55,10,10,20,90);
221      CubicCurve2D curve_2=new  CubicCurve2D.Double(2,30,5,67,20,30,20,90);
222      CubicCurve2D curve_3=new  CubicCurve2D.Double(30,35,54,67,20,90,100,190);
223      g_2d.draw(curve_1);g_2d.draw(curve_2);g_2d.draw(curve_3);
224   }

225}

226
227//例子15
228import java.awt.*;import java.applet.*;
229import java.awt.geom.*;
230public class Example17_15 extends Applet
231{  public void paint(Graphics g)
232   {  Graphics2D g_2d=(Graphics2D)g;
233      BasicStroke bs_1
234      =new BasicStroke(16,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
235      BasicStroke bs_2
236      =new BasicStroke(16f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
237      BasicStroke bs_3
238      =new BasicStroke(16f,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND);
239      Line2D line_1=new  Line2D.Double(20,20,100,20);
240      Line2D line_2=new  Line2D.Double(20,50,100,50);
241      Line2D line_3=new  Line2D.Double(20,80,100,80);
242      g_2d.setStroke(bs_1); //设置线条。
243      g_2d.draw(line_1); 
244      g_2d.setStroke(bs_2); g_2d.draw(line_2);
245      g_2d.setStroke(bs_3); g_2d.draw(line_3);
246   }

247}

248
249//例子16
250import java.awt.*;import java.applet.*;
251import java.awt.geom.*;
252public class Example17_16 extends Applet
253{  public void paint(Graphics g)
254   {  Graphics2D g_2d=(Graphics2D)g;
255      g_2d.setColor(Color.cyan);
256      Rectangle2D rect=new Rectangle2D.Double(0,0,200,200);
257      g_2d.fill(rect);
258      Arc2D arc1=new Arc2D.Double(0,0,200,200,0,180,Arc2D.CHORD),
259         arc2=new Arc2D.Double(0,0,200,200,0,-180,Arc2D.CHORD);
260      RoundRectangle2D roundR1=new RoundRectangle2D.Double
261                            (0,50,100,100,100,100),
262                    roundR2=new RoundRectangle2D.Double
263                            (100,50,100,100,100,100),
264                    roundR3=new RoundRectangle2D.Double
265                            (37.5,87.8,25,25,25,25),
266                    roundR4=new RoundRectangle2D.Double
267                            (137.5,87.8,25,25,25,25);
268      g_2d.setColor(Color.white);  g_2d.fill(arc1);
269      g_2d.setColor(Color.black);  g_2d.fill(arc2);
270      g_2d.fill(roundR1);
271      g_2d.setColor(Color.white);
272      g_2d.fill(roundR2);  g_2d.fill(roundR3);
273      g_2d.setColor(Color.black);
274      g_2d.fill(roundR4);
275   }

276}

277
278//例子17
279import java.awt.*;import java.applet.*
280import java.awt.geom.*;
281public class Example17_17  extends Applet
282{  public void paint(Graphics g)
283   {  Graphics2D g_2d=(Graphics2D)g;
284      GradientPaint gradient_1
285      =new GradientPaint(0,0,Color.red,50,50,Color.green,false);
286      g_2d.setPaint(gradient_1);
287      Rectangle2D rect_1=new Rectangle2D.Double (0,0,50,50); 
288      g_2d.fill(rect_1);
289      GradientPaint gradient_2
290      =new GradientPaint(60,50,Color.white,150,50,Color.red,false);
291      g_2d.setPaint(gradient_2);
292      Rectangle2D rect_2=new Rectangle2D.Double (60,50,90,50); 
293      g_2d.fill(rect_2);
294   }

295}

296
297//例子18
298import java.awt.*;import java.applet.*;
299import java.awt.geom.*;
300public class Example17_18 extends Applet
301{  public void paint(Graphics g)
302   {  Graphics2D g_2d=(Graphics2D)g; 
303      Ellipse2D ellipse=
304      new Ellipse2D. Double (20,50,120,50);
305      g_2d.setColor(Color.blue);
306      
307      AffineTransform trans=new  AffineTransform(); 
308      for(int i=1;i<=24;i++)
309        {  trans.rotate(15.0*Math.PI/180,80,75);
310           g_2d.setTransform(trans);
311           //现在画的就是旋转后的椭圆样子:
312           g_2d.draw(ellipse); 
313        }

314   }

315}

316
317//例子19
318import java.awt.*;import java.awt.event.*;
319import java.awt.geom.*;
320import java.applet.*;
321public class Flower extends Applet 
322{  public void paint(Graphics g)
323   {  Graphics2D  g_2d=(Graphics2D)g;
324      //花叶两边的曲线:  
325      QuadCurve2D
326      curve_1=new  QuadCurve2D.Double(200,200,150,160,200,100);
327      CubicCurve2D curve_2=
328      new  CubicCurve2D.Double(200,200,260,145,190,120,200,100); 
329      //花叶中的纹线:
330      Line2D line=new Line2D.Double(200,200,200,110);  
331      QuadCurve2D leaf_line1=
332      new  QuadCurve2D.Double(200,180,195,175,190,170);
333      QuadCurve2D leaf_line2=
334      new  QuadCurve2D.Double(200,180,210,175,220,170); 
335      QuadCurve2D leaf_line3=
336      new  QuadCurve2D.Double(200,160,195,155,190,150);
337      QuadCurve2D leaf_line4=
338      new  QuadCurve2D.Double(200,160,214,155,220,150);   
339      //利用旋转来绘制花朵:  
340      AffineTransform trans=new AffineTransform();
341      for(int i=0;i<6;i++)
342       {  trans.rotate(60*Math.PI/180,200,200);
343          g_2d.setTransform(trans); 
344          GradientPaint gradient_1=
345  new GradientPaint(200,200,Color.green,200,100,Color.yellow);
346          g_2d.setPaint(gradient_1);
347          g_2d.fill(curve_1);
348          GradientPaint gradient_2=new
349  GradientPaint(200,145,Color.green,260,145,Color.red,true);
350          g_2d.setPaint(gradient_2);
351          g_2d.fill(curve_2);
352          Color c3=new Color(0,200,0); g_2d.setColor(c3); 
353          g_2d.draw(line); 
354          g_2d.draw(leaf_line1); g_2d.draw(leaf_line2);  
355          g_2d.draw(leaf_line3); g_2d.draw(leaf_line4);
356        }

357    //花瓣中间的花蕾曲线:
358      QuadCurve2D center_curve_1=
359  new   QuadCurve2D.Double(200,200,190,185,200,180);
360      AffineTransform trans_1=new AffineTransform(); 
361      for(int i=0;i<12;i++)
362        {  trans_1.rotate(30*Math.PI/180,200,200);
363           g_2d.setTransform(trans_1); 
364           GradientPaint gradient_3=
365           new GradientPaint(200,200,Color.red,200,180,Color.yellow);
366             g_2d.setPaint(gradient_3);
367             g_2d.fill(center_curve_1); 
368         }

369       //再绘制一个0.4倍的花朵:
370       AffineTransform trans_2=new AffineTransform();
371       trans_2.scale(0.4,0.4); 
372       for(int i=0;i<6;i++)
373         {  trans_2.rotate(60*Math.PI/180,200,200);
374            g_2d.setTransform(trans_2);g_2d.setColor(Color.pink);
375            g_2d.fill(curve_1);g_2d.setColor(Color.green);
376            g_2d.fill(curve_2);
377         }

378    }

379}

380
381//例子20
382import java.awt.*;import java.applet.*;
383import java.awt.geom.*;
384public class Example17_20 extends Applet
385{  public void paint(Graphics g)
386   {  Graphics2D g_2d=(Graphics2D)g;
387      Ellipse2D ellipse1=
388      new Ellipse2D. Double (20,50,120,120);
389      Ellipse2D ellipse2=
390      new Ellipse2D. Double (80,50,120,120);
391      Area a1=new Area(ellipse1); Area a2=new Area(ellipse2);
392      a1.intersect(a2);             //"与"
393      g_2d.fill(a1);
394      ellipse1.setFrame(150,50,120,120); ellipse2.setFrame(260,50,50,100);
395      a1=new Area(ellipse1); a2=new Area(ellipse2);
396      a1.add(a2);             //"或"
397      g_2d.fill(a1);
398      ellipse1.setFrame(20,170,120,120);ellipse2.setFrame(80,170,160,160);
399      a1=new Area(ellipse1);  a2=new Area(ellipse2);
400      a1.subtract(a2);             //"差"
401      g_2d.fill(a1);
402      ellipse1.setFrame(150,170,120,120); ellipse2.setFrame(260,170,50,100);
403      a1=new Area(ellipse1);  a2=new Area(ellipse2);
404      a1.exclusiveOr(a2);         //"异或"
405      g_2d.fill(a1);
406   }

407}

408
409//例子21
410import java.awt.*;import java.applet.*;
411import java.awt.geom.*;
412public class Example17_21 extends Applet
413{  public void paint(Graphics g)
414   {  Graphics2D g_2d=(Graphics2D)g; 
415      Ellipse2D ellipse1=
416      new Ellipse2D. Double (20,80,60,60),
417      ellipse2=
418      new Ellipse2D. Double (40,80,80,80);
419      g_2d.setColor(Color.blue);
420      Area a1=new Area(ellipse1),
421           a2=new Area(ellipse2);
422      a1.subtract(a2);             //"差"
423      AffineTransform trans=new  AffineTransform(); 
424      for(int i=1;i<=10;i++)
425         {  trans.rotate(36.0*Math.PI/180,80,75);
426            g_2d.setTransform(trans);
427            g_2d.fill(a1); 
428         }

429   }

430}

431
432//例子22
433import java.awt.*;import java.applet.*;
434public class PaintTest extends Applet
435{  public void init()
436   {  setBackground(Color.yellow);
437   }

438   public void paint(Graphics g)
439   {  g.setXORMode(Color.red);//设置XOR绘图模式。
440      g.setColor(Color.green);
441      g.fillRect(20,20,80,40);//矩形的实际颜色是green+yellow的混合色:灰色。 
442      g.setColor(Color.yellow);
443      g.fillRect(60,20,80,40);//该矩形的前一半是yellow+yellow+灰色=red+灰色,
444                            //后一半是红色。 
445      g.setColor(Color.green);
446      g.fillRect(20,70,80,40);//矩形的实际颜色是green+yellow的混合色:灰色。
447      g.fillRect(60,70,80,40);// 该矩形的前一半是green+yellow+灰色=背景色,
448                // 后一半是green+yellow:灰色。
449      g.setColor(Color.green);
450      g.drawLine(100,100,200,200);//该直线是green+yellow:灰色。
451      //下面,在同一位置再绘制该直线,因此,该直线前半段是green+yellow+灰色=
452     //灰色+灰色=背景色,该直线后半段是green+yellow=灰色: g.drawLine(100,100,220,220); 
453      //仔细分析下列直线颜色的变化:
454      g.setColor(Color.yellow);
455      g.drawLine(20,30,160,30); g.drawLine(20,75,160,75);
456   }

457}

458
459//例子23
460import java.awt.*;import java.awt.event.*;
461import java.awt.geom.*;
462public class Example17_23
463{  public static void main(String args[]) 
464   {  Frame f=new Frame(); 
465      f.setSize(70,70); f.setVisible(true); 
466      Mycanvas canvas=new Mycanvas();
467      f.add(canvas,"Center");f.pack();
468      f.addWindowListener(new WindowAdapter()
469             {public void windowClosing(WindowEvent e)
470                  {System.exit(0); 
471                  }

472             }
);
473      PrintJob p=f.getToolkit().getPrintJob(f,"ok",null);
474      Graphics g=p.getGraphics();
475      g.drawRect(30,30,40,40);
476      g.dispose();
477      p.end();
478   }

479}

480  class Mycanvas extends Canvas
481{  Mycanvas()
482   {  setSize(200,200);
483   }

484 public void paint(Graphics g) 
485   {  g.drawRect(30,30,40,40);
486   }

487}

488
posted @ 2005-05-27 09:30  Rookie.Zhang  阅读(1281)  评论(0编辑  收藏  举报