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![]()

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464

465

466

467

468

469

470

471

472

473

474

475

476

477

478

479

480

481

482

483

484

485

486

487

488
