Java2实用教程(第二版)程序代码——第十七章 Java与图形
1
//例子1
2
import java.applet.*;import java.awt.*;
3
public 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
18
import java.applet.*;import java.awt.*;
19
public 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
33
import java.applet.*;import java.awt.*;
34
public 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
50
import java.applet.*;import java.awt.*;
51
public 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
63
import java.applet.*;
64
import java.awt.*;
65
public 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
77
import java.applet.*; import java.awt.*;
78
public 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
97
import java.applet.*;import java.awt.*;
98
public 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
110
import java.applet.*;import java.awt.*;
111
import java.awt.event.*;
112
public 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
132
import java.awt.*; import java.applet.*;
133
import java.awt.geom.*;
134
public 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
148
import java.awt.*; import java.applet.*;
149
import java.awt.geom.*;
150
public 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
165
import java.awt.*;import java.applet.*;
166
import java.awt.geom.*;
167
public 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
182
import java.awt.*; import java.applet.*;
183
import java.awt.geom.*;
184
public 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
199
import java.awt.*;import java.applet.*;
200
import java.awt.geom.*;
201
public 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
214
import java.awt.*;import java.applet.*;
215
import java.awt.geom.*;
216
public 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
228
import java.awt.*;import java.applet.*;
229
import java.awt.geom.*;
230
public 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
250
import java.awt.*;import java.applet.*;
251
import java.awt.geom.*;
252
public 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
279
import java.awt.*;import java.applet.*;
280
import java.awt.geom.*;
281
public 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
298
import java.awt.*;import java.applet.*;
299
import java.awt.geom.*;
300
public 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
318
import java.awt.*;import java.awt.event.*;
319
import java.awt.geom.*;
320
import java.applet.*;
321
public 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
382
import java.awt.*;import java.applet.*;
383
import java.awt.geom.*;
384
public 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
410
import java.awt.*;import java.applet.*;
411
import java.awt.geom.*;
412
public 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
433
import java.awt.*;import java.applet.*;
434
public 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
460
import java.awt.*;import java.awt.event.*;
461
import java.awt.geom.*;
462
public 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![]()
//例子12
import java.applet.*;import java.awt.*;3
public 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
//例子218
import java.applet.*;import java.awt.*;19
public class Example17_2 extends Applet20
{ 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
//例子333
import java.applet.*;import java.awt.*;34
public class Example17_3 extends Applet35
{ 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
//例子450
import java.applet.*;import java.awt.*;51
public 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
//例子563
import java.applet.*;64
import java.awt.*;65
public 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
//例子677
import java.applet.*; import java.awt.*;78
public class Example17_6 extends Applet79
{ 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
//例子797
import java.applet.*;import java.awt.*;98
public class Example17_7 extends Applet99
{ 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
//例子8110
import java.applet.*;import java.awt.*;111
import java.awt.event.*;112
public class Example17_8 extends Applet113
{ 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
//例子9132
import java.awt.*; import java.applet.*;133
import java.awt.geom.*;134
public class Example17_9 extends Applet135
{ 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
//例子10148
import java.awt.*; import java.applet.*;149
import java.awt.geom.*;150
public class Example17_10 extends Applet151
{ 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
//例子11165
import java.awt.*;import java.applet.*;166
import java.awt.geom.*; 167
public class Example17_11 extends Applet168
{ 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
//例子12182
import java.awt.*; import java.applet.*;183
import java.awt.geom.*;184
public 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
//例子13199
import java.awt.*;import java.applet.*;200
import java.awt.geom.*;201
public class Example17_13 extends Applet202
{ 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
//例子14214
import java.awt.*;import java.applet.*;215
import java.awt.geom.*;216
public class Example17_14 extends Applet217
{ 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
//例子15228
import java.awt.*;import java.applet.*;229
import java.awt.geom.*;230
public class Example17_15 extends Applet231
{ public void paint(Graphics g)232
{ Graphics2D g_2d=(Graphics2D)g;233
BasicStroke bs_1234
=new BasicStroke(16,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);235
BasicStroke bs_2236
=new BasicStroke(16f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);237
BasicStroke bs_3238
=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
//例子16250
import java.awt.*;import java.applet.*;251
import java.awt.geom.*;252
public class Example17_16 extends Applet253
{ 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.Double261
(0,50,100,100,100,100),262
roundR2=new RoundRectangle2D.Double263
(100,50,100,100,100,100),264
roundR3=new RoundRectangle2D.Double265
(37.5,87.8,25,25,25,25),266
roundR4=new RoundRectangle2D.Double267
(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
//例子17279
import java.awt.*;import java.applet.*; 280
import java.awt.geom.*;281
public class Example17_17 extends Applet282
{ public void paint(Graphics g)283
{ Graphics2D g_2d=(Graphics2D)g;284
GradientPaint gradient_1285
=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_2290
=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
//例子18298
import java.awt.*;import java.applet.*;299
import java.awt.geom.*;300
public class Example17_18 extends Applet301
{ 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
//例子19318
import java.awt.*;import java.awt.event.*;319
import java.awt.geom.*;320
import java.applet.*;321
public class Flower extends Applet 322
{ public void paint(Graphics g)323
{ Graphics2D g_2d=(Graphics2D)g;324
//花叶两边的曲线: 325
QuadCurve2D326
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=new349
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
//例子20382
import java.awt.*;import java.applet.*;383
import java.awt.geom.*;384
public class Example17_20 extends Applet385
{ 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
//例子21410
import java.awt.*;import java.applet.*;411
import java.awt.geom.*;412
public class Example17_21 extends Applet413
{ 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
//例子22433
import java.awt.*;import java.applet.*;434
public class PaintTest extends Applet435
{ 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
//例子23460
import java.awt.*;import java.awt.event.*;461
import java.awt.geom.*;462
public class Example17_23463
{ 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 Canvas481
{ Mycanvas()482
{ setSize(200,200);483
}484
public void paint(Graphics g) 485
{ g.drawRect(30,30,40,40);486
}487
}488




浙公网安备 33010602011771号