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[]={5, 45,45,5};
68 int px2[]={140,180,180,140,100,100,};
69 int py2[]={5, 25, 45, 65, 45, 25,};
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
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[]={5, 45,45,5};
68 int px2[]={140,180,180,140,100,100,};
69 int py2[]={5, 25, 45, 65, 45, 25,};
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