Professional Documents
Culture Documents
Phn 1 ............................................................................................................................. 9
Lp trnh ha vi Java 2D .......................................................................................... 9
Chng 1 .................................................................................................................. 10
Tng !an v" Java 2D #P$ ....................................................................................... 10
1.1 %nhan&'( )raphi&*+ T',t+ an( i-aging .......................................................... 10
1.2 .'n('ring /0('1 ............................................................................................ 11
1.2.1 C00r(inat' 23*t'-* ................................................................................. 12
1.2.1.1 4*'r 2pa&' ....................................................................................... 12
1.2.1.2 D'vi&' 2pa&' .................................................................................... 15
1.2.2 Tran*60r-* ............................................................................................... 17
1.2.5 80nt* ........................................................................................................ 19
1.2.7 $-ag'* ...................................................................................................... 1:
1.2.9 8i11* an( 2tr0;'* ....................................................................................... 1<
1.2.: C0-p0*it'* ............................................................................................... 1=
>a&;?ar( C0-pati@i1it3 an( P1at60r- in('p'n('n&' .......................................... 19
1.5.1 >a&;?ar( C0-pati@i1it3 .......................................................................... 19
1.5.2 P1at60r- in('p'n('n&' ............................................................................ 21
1.7 Th' Java 2DA #P$ Pa&;ag'* ......................................................................... 21
Chng 2B ................................................................................................................. 29
.'n('ring ?ith )raphi&*2D ..................................................................................... 29
2.1 CC& 1p vD gia0 (iEn. ...................................................................................... 2:
2.2 .'n('ring C0n&'pt* ........................................................................................ 2<
2.2.1 .'n('ring Pr0&'** .................................................................................... 2=
2.2.2 C0ntr011ing .'n('ring F!a1it3 ................................................................ 29
2.2.5 2tr0;' #ttri@!t'* ...................................................................................... 51
2.2.7 8i11 #ttri@!t'* ........................................................................................... 52
F!C trnh ,G 1H th'0 phiIn ............................................................................ 57
2.2.9 C1ipping Path* .......................................................................................... 57
2.2.: Tran*60r-ati0n* ....................................................................................... 59
2.2.:.1 C0n*tr!&ting an #66in'Tran*60r- .................................................... 5<
2.2.< C0-p0*it' #ttri@!t'* ............................................................................... 5=
2.2.<.1 /anaging Tran*par'n&3 .................................................................. 59
2.2.<.2 Tran*par'n&3 an( i-ag'* ................................................................. 70
2.5 ThiJt 1p )raphi&*2C0nt',t ............................................................................ 70
2.5.1 2'tting .'n('ring Kint* ........................................................................... 70
2.5.2 2p'&i63ing 2tr0;' #ttri@!t'* .................................................................... 71
2.5.2.1 2'tting th' 2tr0;' Li(th .................................................................. 71
2.5.2.2 2p'&i63ing J0in an( %n(&ap 2t31'* .................................................. 72
2.5.2.5 2'tting th' Da*hing Patt'rn .............................................................. 72
2.5.5 2p'&i63ing 8i11 #ttri@!t'* ......................................................................... 77
2.5.5.1 8i11ing a 2hap' ?ith a )ra(i'nt ....................................................... 77
2.5.5.2 8i11ing a 2hap' ?ith a T',t!r' ......................................................... 79
2.5.7 2'tting th' C1ipping Path ......................................................................... 7:
2.5.9 2'tting th' )raphi&*2D Tran*60r- .......................................................... 7=
2.5.: 2p'&i63ing a C0-p0*iti0n 2t31' .............................................................. 91
2.5.:.1 4*ing th' 20!r&' Mv'r C0-p0*iting .!1' ....................................... 91
2.5.:.2 $n&r'a*ing th' Tran*par'n&3 06 C0-p0*it'( M@N'&t* ...................... 91
2.7 .'n('ring )raphi&* Pri-itiv'* ....................................................................... 95
2.7.1 Dra?ing a 2hap' ...................................................................................... 95
2.7.2 8i11ing a 2hap' ......................................................................................... 99
httpBOOtai1i'!ha3.&0-
1
Lp trnh ha trn Java 2D v 3D
2.7.5 .'n('ring T',t ........................................................................................ 9:
2.7.7 .'n('ring i-ag'* .................................................................................... 9:
2.9 D'6ining C!*t0- C0-p0*iti0n .!1'* ............................................................. 9:
2.: .'n('ring in a /!1tiP2&r''n %nvir0n-'nt ..................................................... 9<
Chng 5 .................................................................................................................. <9
CC& Qi tRng hnh ha ............................................................................................. <9
5.1 )ia0 (iEn vD 1p. ............................................................................................. <9
5.2 CC& ;hCi niE- hnh h&B ................................................................................. <=
5.2.1 C0n*tr!&tiv' #r'a )'0-'tr3 ................................................................... <9
5.2.2 >0!n(* an( Kit T'*ting ........................................................................... =0
5.5 C0-@ining #r'a* t0 Cr'at' S'? 2hap'* ........................................................ ==
Chng 7B ................................................................................................................. 97
KiTn thU 80nt vD vVn @Wn ........................................................................................... 97
7.1.)ia0 (iEn vD 1p. ............................................................................................. 97
7.2.CC& ;hCi niE- v" 80nt .................................................................................... 9:
7.5 CC& ;hCi niE- v" T',t La30!t. ....................................................................... 9=
7.5.1 XY &hZ. ..................................................................................................... 99
7.5.2 Mr('ring T',t ......................................................................................... 101
7.5.5 [0 vD Unh vU vVn @Wn ............................................................................ 105
7.5.7 K\ trR tha0 tC& vi vVn @Wn. ................................................................... 107
7.5.7.1 KiTn thU (]! nh^& ............................................................................ 107
7.5.7.2 Di &h!3Tn (]! nh^&. ....................................................................... 10:
7.5.7.5 Kit T'*ting ..................................................................................... 10<
7.5.7.7 [Cnh (]! v_ng 1`a &hn. ............................................................... 10=
7.5.9 Th`& thi viE& hiTn thU vVn @Wn tr0ng ang (bng JavaA . ........................ 109
F!Wn 1H viE& hiTn thU vVn @Wn. ............................................................................ 110
7.7.1 Trnh @D3 vVn @Wn. ................................................................................. 111
KiTn thU (]! nh^& ;cp. .................................................................................... 112
7.7.5 Di &h!3Tn (]! nh^&. ............................................................................... 115
7.7.7 Kit T'*ting ............................................................................................. 117
7.7.9 [Cnh (]! v_ng 1`a &hn. ....................................................................... 119
7.7.: F!'r3ing La30!t /'tri&* ....................................................................... 119
7.7.< XY vVn @Wn trIn nhi"! (dng. .................................................................. 11:
Chng 9 ................................................................................................................ 12:
Te0 Wnh ....................................................................................................................... 12:
9.1 CC& gia0 (iEn vD &C& 1p .......................................................................... 12:
9.1.1 CC& gia0 (iEn i-aging fi-aging int'r6a&'*g ......................................... 12<
9.1.2 CC& 1p (Z 1iE! Wnhfi-ag' Data C1a**'*g .............................................. 12<
9.1.5 i-ag' Mp'rati0n C1a**'* ........................................................................ 129
9.1.7 2a-p1' /0('1 C1a**'* ........................................................................... 150
C010r /0('1 C1a**'* ....................................................................................... 151
9.1.: %,&'pti0n C1a**'* .................................................................................. 152
9.2 $--'(iat' /0(' i-aging C0n&'pt* ............................................................. 155
9.2.1 T'r-in010g3 ........................................................................................... 159
9.5 4*ing >!66'r'(i-ag'* .................................................................................. 15:
9.5.1 Cr'ating a >!66'r'(i-ag' ...................................................................... 15:
9.5.2 Dra?ing in an M66*&r''n >!66'r ............................................................ 15<
9.5.2.1 Cr'ating an M66*&r''n >!66'r ......................................................... 15=
9.5.2.2 Dra?ing in an M66*&r''n >!66'r .................................................... 170
9.5.5 /anip!1ating >!66'r'(i-ag' Data Dir'&t13 .......................................... 171
httpBOOtai1i'!ha3.&0-
2
Lp trnh ha trn Java 2D v 3D
9.5.7 8i1t'ring a >!66'r'(i-ag' ...................................................................... 172
9.5.9 .'n('ring a >!66'r'(i-ag' .................................................................. 172
9.7 /anaging an( /anip!1ating .a*t'r* ............................................................ 190
9.7.1 Cr'ating a .a*t'r .................................................................................... 190
9.7.2 Par'nt an( Chi1( .a*t'r* ........................................................................ 191
9.7.7 Th' Lrita@1'.a*t'r 2!@&1a** ................................................................. 191
9.9 $-ag' Data an( Data>!66'r* ......................................................................... 192
9.: %,tra&ting Pi,'1 Data 6r0- a 2a-p1'/0('1 ................................................. 195
9.< C010r/0('1* an( C010r Data ........................................................................ 197
9.<.1 L00;!p Ta@1' ......................................................................................... 199
9.= i-ag' Pr0&'**ing an( %nhan&'-'nt ............................................................. 199
9.=.1 4*ing an i-ag' Pr0&'**ing Mp'rati0n ................................................... 19=
Chng : ................................................................................................................ 1:2
/! *^& ................................................................................................................... 1:2
:.1 CC& 1p ......................................................................................................... 1:5
:.2 ShZng Unh nghha v" -! *^&. ...................................................................... 1:5
:.2.1 ihjng gian -! .................................................................................... 1:7
:.2.1 >iT! (ikn -D! ....................................................................................... 1:<
Chng < ............................................................................................................... 1<1
$n ]n ........................................................................................................................ 1<1
<.1 CC& gia0 (iEn vD &C& 1p ............................................................................... 1<1
<.2.1 2!pp0rting Printing ................................................................................ 1<7
<.2.1.1 [i"! ;hiTn in fJ0@ C0ntr01g ........................................................... 1<7
<.2.2 Pag' Paint'r* .......................................................................................... 1<9
<.2.5 Printa@1' J0@* an( Pag'a@1' J0@* ........................................................... 1<<
<.2.7 T3pi&a1 Li6'PC3&1' 06 a Print'rJ0@ ................................................................ 1<=
<.5 Printing ?ith Printa@1'* ................................................................................ 1=1
<.5.2 Printing a 8i1' ......................................................................................... 1=9
<.7.1 4*ing a Pag'a@1' J0@ ............................................................................. 191
<.7.2 4*ing /!1tip1' Pag' Paint'r* ................................................................ 195
Phn 2 ......................................................................................................................... 20:
Lp trnh ha vi Java 5D ...................................................................................... 20:
CKlmS) 1 ............................................................................................................ 20<
SKnP /oS LnP T.pSK T.qS J#X# 5D ......................................................... 20<
1.1 Tng !an v" Java 5D #P$ A ...................................................................... 20<
1.2 CC& v]n " & @Wn v" Java 5D #P$A .......................................................... 20=
1.5 rs3 (`ng thU ;h!ng &Wnh ......................................................................... 20=
1.5.1 Thta ;J &]p &a0 tt Java 5D #P$ .......................................................... 217
1.7 CC&h tha& T viJt -ut &hng trnh Java 5D .................................................... 21:
1.7.1 Cjng tha& n giWn T viJt -ut &hng trnh Java 5D ........................ 21:
1.9 /ut vDi th!t ngZ tr0ng Java 5D ................................................................. 221
1.: Xv (b n giWnB K'110Java5Da ..................................................................... 225
1.:.1 CC& 1p &wa Java 5D C1a**'* R& *G (bng tr0ng K'110Java5Da .............. 229
Te0 nIn hnh 1p phng &x ;v&h th& R& Unh ra @yi &C& giC trU &h0 tr&. .... 255
1.< F!a3 hnh 1p phng ................................................................................. 255
1.<.1 2` ;Jt hRp &wa &C& phcp @iJn hnhB K'110Java5D@ ............................... 259
1.= ihW nVng vD h0et ung ................................................................................. 25:
1.=.1 DU&h &C& nui (!ng .................................................................................. 25:
1.=.2 ihW nVng ............................................................................................... 25<
1.9 ThI- vD0 &C& hDnh vi ani-ati0n .................................................................. 259
httpBOOtai1i'!ha3.&0-
5
Lp trnh ha trn Java 2D v 3D
1.9.1 [Unh nghha &C& hDnh vi ani-ati0n ......................................................... 270
1.9.2 CC& hD- @iJn i v" thzi gianB {nh ,e -ut hDnh vi vi thzi gian ........ 271
1.9.5 Lp (anh -b& &C& v_ng ......................................................................... 272
1.9.7 Xv (b v" hDnh viB K'110Java5D& ........................................................... 275
1.9.9 Phcp @iJn hnh vD ;Jt hRp &C& hDnh vi .Xv (bB K'110Java5D( ............. 27:
CKlmS) 2 ............................................................................................................ 291
Te0 &C& hnh ............................................................................................................ 291
2.1 KE ta u thJ gii W0 ..................................................................................... 291
2.2 Xi*!a1 M@N'&t D'6initi0n >a*i&* ................................................................... 292
2.2.1 #n $n*tan&' 06 2hap'5D D'6in'* a Xi*!a1 M@N'&t ................................ 292
2.2.2 S0(' C0-p0n'nt* .................................................................................. 297
2.2.5 D'6ining Xi*!a1 M@N'&t C1a**'* ............................................................. 299
2.5 CC& 1p tiEn v&h hnh h& ............................................................................. 29:
2.5.1 >0, ......................................................................................................... 29<
2.5.2 C0n' ...................................................................................................... 299
2.5.5 C31in('r ................................................................................................. 299
2.5.7 2ph'r' .................................................................................................... 2:0
2.5.9 /0r' #@0!t )'0-'tri& Pri-itiv'* ........................................................ 2:1
2.5.: C010rC!@' ............................................................................................. 2:1
2.5.< %,a-p1'B Cr'ating a 2i-p1' |0P|0 8r0- T?0 C0n'* ........................ 2:1
2.7 CC& 1p t0Cn h& ........................................................................................... 2:<
2.7.1 P0int C1a**'* ............................................................................................. 2<1
2.7.2 C010r C1a**'* ......................................................................................... 2<2
2.7.5 X'&t0r C1a**'* ........................................................................................ 2<7
2.7.7 T',C00r( C1a**'* .................................................................................. 2<9
2.9 CC& 1p hnh h& ........................................................................................... 2<:
2.9.1 )'0-'tr3#rra3 C1a** ........................................................................... 2<<
2.9.2 2!@&1a**'* 06 )'0-'tr3#rra3 .............................................................. 2=7
2.9.5 2!@&1a**'* 06 )'0-'tr32trip#rra3 ........................................................ 2=:
2.9.7 2!@&1a**'* 06 $n(','()'0-'tr3#rra3 ................................................... 295
2.9.9 #,i*.Nava i* an %,a-p1' 06 $n(','()'0-'tr3#rra3 ............................ 29:
2.: #pp'aran&' an( #ttri@!t'* ............................................................................ 29:
2.:.1 #pp'aran&' S0('C0-p0n'nt ................................................................ 29=
2.:.2 2haring S0('C0-p0n'nt M@N'&t* ........................................................ 29=
2.:.5 #ttri@!t' C1a**'* ................................................................................... 299
2.:.7 %,a-p1'B >a&; 8a&' C!11ing ................................................................ 510
2.< >0!n(* an( 2&0p' ........................................................................................ 520
2.<.1 >0!n(* S0(' C0-p0n'nt* ................................................................... 521
2.<.2 >0!n(ingL'a6a S0(' ............................................................................ 529
2.<.5 2&0p' ...................................................................................................... 52<
2.= Knh h& nsng &a0 ........................................................................................ 529
2.=.1 /!1tip1' )'0-'tri'* in a 2ing1' 2hap'5D ........................................... 529
2.=.2 )'0-'tr3#rra3 ..................................................................................... 552
2.=.7 #1t'rnat'#pp'aran&' }n'? in 1.2~ ...................................................... 570
2.9 C1ipping C^t ,cn ........................................................................................ 575
2.9.1 Xi'? D'6in'* a 8r!*t!- ........................................................................ 575
2.9.2 C1ip S0(' .............................................................................................. 579
2.9.7 /0('1C1ip %,a-p1' .............................................................................. 57:
CKlmS) 5 ............................................................................................................ 590
TM S$ D4S) .................................................................................................... 590
httpBOOtai1i'!ha3.&0-
7
Lp trnh ha trn Java 2D v 3D
5.1 Sui (!ng &hvnh .............................................................................................. 590
5.1.1 )'0-'tr3$n60 ......................................................................................... 591
5.2.1 /ut vv (b n giWn v" )'0-'tr3$n60 ........................................................ 591
5.2.2 2G (bng )'0-'tr3$n60 .......................................................................... 592
5.2.5 /ut *Q 1p thjng (bng &x 1iIn !an Jn )'0-'tr3$n60 ........................ 595
L0a('r* ................................................................................................................ 59=
/ut vv (b n giWn *G (bng 1'a('r. ................................................................ 599
CC& 10a('r ph @iJn ........................................................................................... 5:0
5.5.5 )ia0 (iEn &wa gxi L0a('r vD 1p & *y ............................................... 5:1
XiJt -ut 10a('r ................................................................................................... 5:9
Cjng viE& &wa -ut 10a('r ............................................................................... 5:9
KD- te0 1p L0a('r ........................................................................................ 5::
XiJt -ut 8i1' L0a('r n giWn ........................................................................ 5:=
T',t2D ................................................................................................................ 5<9
5.9.1 Xv (b T',t2D n giWn .......................................................................... 5=0
5.9.2 Lp T',t2D ............................................................................................ 5=0
T',t5D ................................................................................................................ 5=2
/ut vv (b T',t5D ........................................................................................... 5=2
ShZng 1p 1iIn !an T te0 ra Qi tRng T',t5D ........................................... 5=7
S"n ;hjng gian ha ...................................................................................... 591
/ut vv (b @a&;gr0!n( ..................................................................................... 591
Lp >a&;gr0!n( ............................................................................................. 592
CKlmS) 7 ............................................................................................................ 59:
TlmS) T{C ......................................................................................................... 59:
7.1 KDnh viB C *y &wa tng tC& vD h0et hnh ................................................... 59<
7.1.1 ng (bng &wa hDnh vi ............................................................................ 59<
7.1.2 Tng !an 1p >'havi0!r ...................................................................... 599
7.2 C @Wn v" hDnh vi ......................................................................................... 599
7.2.1 XiJt -ut 1p >'havi0!r ......................................................................... 700
7.2.2 2G (bng -ut 1p >'havi0!r ................................................................... 709
7.2.5 CC& hD- #P$ tr0ng 1p >'havi0!r ......................................................... 709
7.5 [i"! ;iEn ;v&h h0etB CC&h ;v&h h0et &C& hDnh vi .......................................... 712
7.5.1 [i"! ;iEn ;v&h h0et ................................................................................ 715
7.5.2 La;'!pCrit'ri0n .................................................................................... 717
7.5.5 F!3 Unh 1p La;'!pCrit'ri0n ............................................................. 717
7.5.7 ThDnh phn &wa La;'!pC0n(iti0n ....................................................... 750
7.7 Lp >'havi0!r tiEn v&h ,G 1H @Dn phv- ........................................................ 752
7.7.1 /ut vv (b n giWn ................................................................................. 755
7.7.2 Lp i'3Savigat0r>'havi0!r vD i'3Savigat0r .................................. 759
7.9 Lp tiEn v&h tng tC& vi &h!ut ................................................................... 75<
7.9.1 2G (bng 1p /0!*'>'havi0!r .............................................................. 75<
7.9.2 /0!*' >'havi0!r 80!n(ati0n ................................................................ 772
7.9.5 CC& 1p /0!*'>'havi0!r ..................................................................... 777
7.9.7 /0!*' Savigati0n .................................................................................. 77<
7.: Pi&;ing M@N'&t ............................................................................................... 790
7.:.1 4*ing Pi&;ing 4ti1it3 C1a**'* ................................................................ 797
7.:.2 CC& hD- #P$ & @Wn tr0ng &C& 1p Pi&;ing .......................................... 79=
7.:.5 CC& 1p pi&;ing ...................................................................................... 7:<
7.:.7 CC& 1p Pi&;ing >'havi0r ..................................................................... 7<1
CKlmS) 9 ............................................................................................................ 7<7
httpBOOtai1i'!ha3.&0-
9
Lp trnh ha trn Java 2D v 3D
K0et Knh ................................................................................................................ 7<7
#ni-ati0n P K0et hnhB ....................................................................................... 7<:
[Qi tRng $nt'rp01at0r vD #1pha vi h0et Wnh (`a thzi gian ............................. 7<<
#1pha ................................................................................................................... 7<<
2G (bng &C& Qi tRng $nt'rp01at0r vD #1phaB ................................................... 7=0
Xv (b *G (bng 1p #1pha vD .0tati0n$nt'rp01at0rB ............................................. 7=0
#1pha #P$B .......................................................................................................... 7=:
CC& 1p hDnh vi $nt'rp01at0r B ............................................................................. 7=9
C0r' $nt'rp01at0r #P$B ....................................................................................... 907
CC& 1p Qi tRng nui *!3 zngB ...................................................................... 915
Lp >i11@0ar( B ........................................................................................................ 922
2G (bng Qi tRng >i11@0ar( ............................................................................. 925
Chng trnh vv (b *G (bng >i11@0ar( ............................................................... 929
)ia0 (iEn 1p trnh ang (bng &wa >i11@0ar( f>i11@0ar( #P$g ........................... 929
Mri'nt'(2hap'5D ................................................................................................ 951
)ia0 (iEn 1p trnh ang (bng &wa Mri'nt'(2hap'5D .......................................... 952
Xv (b *G (bng Mri'nt'(2hap'5D ........................................................................ 955
K0et Wnh -a& &hi tiJt fL'v'1 M6 D'tai1 #ni-ati0n*g ......................................... 959
2G (bng Qi tRng Di*tan&'LMD ....................................................................... 95:
CC& 1\i thzng gp ;hi *G (bng LMD ............................................................ 95<
Xv (b *G (bng Di*tan&'LMD .............................................................................. 95<
)ia0 (iEn 1p trnh ang (bng Di*tan&'LMD #P$ ............................................... 977
/0rph ................................................................................................................. 979
2G (bng Qi tRng /0rph .................................................................................. 97:
Xv (b *G (bng /0rph ......................................................................................... 97<
)ia0 (iEn 1p trnh ang (bng /0rph #P$ .......................................................... 995
)ia0 (iEn )'0-'tr34p(at'r ................................................................................... 997
2G (bng )'0-'tr34p(at'r ................................................................................. 999
Chng trnh vv (b hE thQng phsn tG Di ph!n n& *G (bng )'0-'tr34p(at'r
............................................................................................................................ 99:
Li ni u
2` phCt triTn &wa ;h0a h&+ ;h th!t+ nghE th!t+ ;inh (0anh+ vD
&jng nghE 1!jn 1!jn phb th!u& vD0 ;hW nVng tr!3"n et thjng tin &wa
&hng ta+ h0& thjng !a &C& @it (Z 1iE! 1! trZ tr0ng -i&r0&hip h0&
thjng !a gia0 tiJp @ng tiJng nxi. Cs! &hs- ngjn tt ,a ,a -ut hnh
Wnh &x giC trU hn &W ven 1zi ha3 trV- ngh' ;hjng @ng -ut th]3 &h0
th]3 H nghha r]t 1n &wa hnh Wnh tr0ng viE& &h!3Tn tWi thjng tin. Knh
Wnh @a0 giz &ng R& &W- nhn nhanh vD (k (Dng hn+ & @iEt 1D tr0ng
trzng hRp @]t ng v" ngjn ngZ. D0 x ;hjng &x g nge& nhiIn ;hi -D
nga3 tt ;hi ,!]t hiEn -C3 tvnh+ &C& nhD nghiIn &a! &Q g^ng *G (bng
nx T phCt *inh &C& Wnh trIn -Dn hnh. Tr0ng *!Qt gn 90 nV- phCt triTn
httpBOOtai1i'!ha3.&0-
:
Lp trnh ha trn Java 2D v 3D
&wa -C3 tvnh+ ;hW nVng phCt *inh hnh Wnh @ng -C3 tvnh &wa &hng ta
et ti -a& -D @s3 giz h! nh t]t &W &C& -C3 tvnh "! &x ;hW nVng
ha.[ ha -C3 tvnh 1D -ut tr0ng nhZng 1hnh v`& 1v th nh]t vD phCt triTn
nhanh nh]t &wa tin h&. Sga3 tt ;hi ,!]t hiEn+ ha -C3 tvnh &x *a&
1ji &!Qn -nh 1iEt+ &!Qn ht r]t nhi"! ngzi y nhi"! 1hnh v`& ;hC& nha!
nh ;h0a h&+ nghE th!t+ ;inh (0anh+ !Wn 1v+ ... Tvnh h]p (n vD a (eng
&wa ha -C3 tvnh &x thT R& -inh ha r]t tr`& !an thjng !a viE&
;hW0 *Ct &C& ang (bng &wa nx.
SgD3 na3+ ha -C3 tvnh R& *G (bng tr0ng r]t nhi"! 1hnh v`&
;hC& nha! nh &jng nghiEp+ thng -ei+ !Wn 1v+ giC0 (b&+ giWi trv+ 2Q
1Rng &C& &hng trnh ha ang (bng tht ;hng 1 vD phCt triTn 1iIn
tb&.Tr0ng 1hnh v`& &jng nghiEp+C#Df&0-p!t'rPai('( ('*igng R& *G
(bng h! hJt tr0ng viE& thiJt ;J &C& &a0 Q&+ j tj+ -C3 @a3+ tD! thw3+ tD! v
trb+ -C3 tvnh+Tr0ng 1hnh v`& giWi trv+nghE th!t+ ha -C3 tvnh gip ta
te0 ra &C& &hng trnh trd &hi+&C& ;h ,W0 iEn Wnh &h0 &C& nhD 1D-
phi-+ha3 nga3 &hvnh gia0 (iEn ha 1D- nsng &a0 ;hW nVng gia0 tiJp
giZa ngzi vD -C3 tvnh.
[T &x thT 1D- R& nhZng ang (bng ha hZ! v&h &h0 &!u&
*Qng+tr& hJt &hng ta &n phWi &x -ut n"n tWng vZng &h^& v" 1p trnh
ha.Cx r]t nhi"! ngjn ngZ h\ trR 1p trnh ha -C3 tvnh+-\i ngjn
ngZ R& ,s3 (ng trIn nhZng th viEn ha riIng+&x nhZng thJ -enh
riIng.XD ;hi nxi v" 1p trnh ha+&hng ta ;hjng thT ;hjng nxi Jn
ngjn ngZ Java+-ut ngjn ngZ r]t -enh tr0ng 1hnh v`& nD3.Xi -b& v&h
nghiIn &a!+t- hiT! vD -ang Jn &h0 nhZng ai -!Qn t- hi"! v" 1p trnh
ha -ut tDi 1iE! thiJt th`&+nhx- &hng '- &hn " tDi 1D- t!t0ria1
v" 1p trnh ha trIn n"n tWng ngjn ngZ 1sp trnh Java+(`a trIn &C& tDi
1iE! training trIn -eng &wa hng 2!n.X 1D 1n ! 1D- tDi 1iE! tha- ;hW0
httpBOOtai1i'!ha3.&0-
<
Lp trnh ha trn Java 2D v 3D
nIn &hng '- ;hjng trCnh ;hi *ai *xt.Chng '- -0ng th3 ,'- ,ct vD
gxp H &h0 tDi 1iE! nD3.Chng '- &hsn thDnh &W- n.
httpBOOtai1i'!ha3.&0-
=
Lp trnh ha trn Java 2D v 3D
Phn 1
Lp trnh ha vi Java 2D
httpBOOtai1i'!ha3.&0-
9
Lp trnh ha trn Java 2D v 3D
Chng 1
Tng quan v Java 2D API
Java 2DA #P$ tVng &zng v" ;hW nVng h0e+ vVn @Wn vD Wnh &wa
#@*tra&t Lin(0?ing T001;it f#LTg+ gip phCt triTn v" gia0 (iEn ngzi
*w (bng vD ang (bng v" J#X# tr0ng -ut *Q 1hnh v`& -i.C_ng vi ;hW
nVng -enh v" h0e +phjng &hZ vD Wnh tr0ng &C& #P$+ th Java 2D #P$
&dn h\ trR nhZng th!u& tvnh vD thDnh phn -D! *^& R& nsng &a0+ vD
thDnh &jng tr0ng viE& @iT! (ikn &C& @" -t hnh h& t! H vD -ut ;iT! tj
trCt &h!n &h0 -C3 in vD thiJt @U hiTn thU. Java 2D #P$ &ng &h0 phcp te0
ra &C& th viEn h0e -y rung+nh &C& th viEn &wa C#DPC#/ vD &C&
th viEn te0 hiE! ang & @iEt &h0 Wnh vD h0e+ &ng nh viE& te0 ra &C&
@u 1& &OviJt 6i1' Wnh vD h0e.ihi R& *G (bng ;Jt hRp vi Java
/'(ia 8ra-'?0r; Java /'(ia #P$* ;hC& +th Java 2D #P$* &x thT R&
*G (bng T te0 ra vD hiTn thU hiEn th`& W0 vD &C& (eng a phng tiEn
;hC&. Java #ni-ati0n vD Java /'(ia 8ra-'?0r; #P$* (a trIn Java 2D
#P$ T h\ trR viE& tj trCtfr'n('ringg.
1.1 Enhanced Graphics, Tet, and i!a"in"
SJ! &C& phiIn @Wn tr& &wa #LT &h &!ng &]p &C& gxi tj
trCtfr'n('ringg n giWn &h ph_ hRp &h0 viE& r'n('ring &C& trang KT/L
n giWn+-D ;hjng Cp ang w &h0 &C& (eng h0e+vVn @Wn vD Wnh pha&
httpBOOtai1i'!ha3.&0-
10
Lp trnh ha trn Java 2D v 3D
tep. Th Java 2DA #P$ &!ng &]p gxi tj trCt 3 w &C& tvnh nVng @ng
&C&h -y rung #LT T h\ trR &h0 h0e vD &C& tha0 tC& r'n('ring. Xv (b
nh thjng !a &C& 1p h0e &h0 phcp vY hnh &hZ nht+hnh jva1+vD &C&
a giC&. [ h0e 2D tVng &zng v" ;hCi niE- &wa phcp tj trCt hnh h&
@ng &C&h &!ng &]p -ut & &hJ &h0 phcp r'n('ring W0 &wa @]t ; @" -t
hnh h& nD0.Tng t nh v3 vi Java 2D #P$ @en &x thT vY &C& (eng
zng vi @]t ; u rung vD (eng hnh h& nD0.
Deng hnh h& R& &!ng &]p thjng !a &C& phn th`& thi
i-p1'-'ntati0n* &wa Shape int'r6a&' tr0ng Graphic &1a**+ nh hnh &hZ
nht 2D vD %1ip 2D. CC& zng &0ng vD hnh &!ng &ng th!u& phn
i-p1'-'ntati0n* &wa Shape. CC& ;iT! vY vD tj &ng R& &!ng &]p thjng
!a phn th`& thi i-p1'-'ntati0n* &wa gia0 tiJp Paint v Stroke
interfaces+ vv (b BasicStroke+ GradientPaint+ TexturePaint+vD Coor.
!ffineTransfor" Unh nghha &C& phcp @iJn i tr0ng t0e u 2 &hi"!+
g- &x phcp 1]3 t 1E+phcp &h!3Tn i t0e u +phcp !a3 vD phcp ,cn &^t.
ih!ng nhn R& Unh nghha @yi &C& phng tha& giQng nha! &wa 1p
Shape -D &hng R& (_ng T Unh nghha &C& ;h!ng nhn &h!ng+vv (b
nh #ectan$e%& vD GeneraPath.
ThDnh phn -D! *^& R& &!ng &]p @yi &C& phng tha& &wa 1p
Co"posite+ vv (b !phaCo"posite.
/ut ;iT! 80nt &hZ th R& Unh nghha @yi &C& &011'&ti0n &wa G'phs.
1.2 #enderin" $%de&
iiT! tj trCt ha n giWn ;hjng &x g tha3 i ;hi thI- vD0 Java
2DA #P$*. [T tj trCt ha th phWi thiJt 1p &C& thjng *Q v" ha vD
gi phng tha& &wa Qi tRng )raphi&*.
Tr0ng Java 2D #P$+ 1p )raphi&*2D -y rung 1p )raphi&* T h\ trR
thI- nhi"! th!u& tvnh ha vD &!ng &]p thI- &C& phng tha& &h0 !C
trnh tj trCt.
httpBOOtai1i'!ha3.&0-
11
Lp trnh ha trn Java 2D v 3D
Th' Java 2D #P$ t` ung &sn &hnh nhZng *ai ;hC& tr0ng &C& thiJt @U tj
trCt vD &!ng &]p -ut ;iT! tj trCt thQng nh]t &h0 &C& (eng thiJt @U ;hC&
nha!. Tei tng ang (bng+!C trnh tj trCt 1D giQng nha! &h0 (_ thiJt @U
&!Qi x 1D -Dn hnh ha3 -C3 in.
Xi Java 2 2Di+ v'r*i0n 1.5 + Java 2D #P$ &dn h\ trRp &h0 &C& -ji
trzng a -Dn hnh f-!1tiP*&r''n 'nvir0n-'nt*g.
(.%.( Coordinate S'ste"s
Java 2D #P$ @a0 hD- hai hE ta uB
1. ihjng gian ngzi *w (bng 1D hE ta u 10gi& vD u& 1p vi thiJt @U.
CC& ang (bng thzng *w (bng hE ta u nD3+t]t &W &C& (eng hnh
h& R& tj trCt @ng Java 2D "! R& ,C& Unh tr0ng hE ta u
nD3.
2. ihjng gian thiJt @U 1D hE ta u phb th!u& thiJt @U+ang vi ttng 10ei
thiJt @U &!Qi -D &x hE te0 u ;hC& nha!.
>ng ang (bng -C3 W0 -ut &Ga * hiTn thU &x thT -y rung thI- nhi"!
thiJt @U hiTn thU v3 1H te0 nIn -ji trzng a -Dn hiTn thU+ hE ta u &wa
thiJt @U nD3 R& *w (bng 1D- hE ta u &wa -C3 W0 *Y R& 1]3 1D- hE
ta u &h0 t]t &W &C& -Dn hiT thU &dn 1ei.
KE thQng Java 2D *Y t` ung th`& hiEn nhZng phcp &h!3Tn i &n
thiJt giZa ;hjng gian ngzi *G (bng vD ;hjng gian thiJt @U . /& (_ hE
ta u &h0 -Dn hnh r]t ;hC& Qi vi hE ta u &h0 -C3 in nhng *` ;hC&
@iEt nD3 tr0ng *!Qt Qi vi &C& ang (bng.
1.2.1.1 User Space
KE ta u nD3 R& &h ra tr0ng hnh 1P1.
(0,0)
x
httpBOOtai1i'!ha3.&0-
12
Lp trnh ha trn Java 2D v 3D
y
8ig!r' 1P1 4*'r 2pa&' C00r(inat' 23*t'-
ihjng gian ngzi *G (bng @iT! (ikn -ut &C&h trt! tRng ng nh]t
&h0 &C& hE te0 u &wa t]t &W &C& thiJt @U &x 1iIn !an.Cdn ;hjng gian thiJt
@U &h0 -ut thiJt @U &b thT &x thT &x &_ng gQ& ta u vD hng &wa &C& trb&
h0& 1D &x thT ;hjng.Sg0Di ra &C& ta u &wa ;hjng gian ngzi *G (bng
&x thT &h!3Tn i -ut &C&h t` ung vD0 ;hjng gian thiJt @U ph_ hRp -\i
;hi -ut Qi tRng ha R& tj trCt+thzng th &C& &hng trnh (riv'r
&wa &C& thiJt @U th`& hiEn i"! nD3.
1.2.1.2 Device Space
Java 2D #P$ Unh nghha 5 -a& thjng tin &]! hnh T h\ trR &h0 viE&
&h!3Tn i tt ;hjng gian ngzi *G (bng *ang ;hjng gian thiJt @U. Thjng
tin nD3 R& &haa tr0ng 5 1p B
)raphi&*%nvir0n-'nt
)raphi&*D'vi&'
)raphi&*C0n6ig!rati0n
Kai tr0ng *Q &hng *Y @iT! (ikn t]t &W &C& thjng tin &n thiJt &h0 viE&
,C& Unh thiJt @i tj trCt vD &h0 viE& &h!3Tn i ta u tt ;hjng gian ngzi
httpBOOtai1i'!ha3.&0-
15
Lp trnh ha trn Java 2D v 3D
*G (bng *ang ;hjng gian thiJt @U. ng (bng &x thT tr!3 &p thjng tin nD3
nhng ;hjng nh]t thiJt phWi th`& hiEn @]t ; phcp &h!3Tn i nD0 gia hai
hE ta u&h!3Tn .
Lp Graphics)nviron"ent -j tW tp &C& thiJt @U -D `R& &h]p nhn @yi
&C& ang (bng Java tr0ng -ut -ji trzng &b thT.CC& thiJt @U *G (bng &h0
!C trnh tj trCt g- &x -Dn hnh + -C in vD &C& @u E- Wnh.Lp
Graphics)nviron"ent &ng @a0 g- tp &C& 60nt ph_ hRp tr0ng -ji
trzng x.
Lp Graphics&evice -j tW thiJt @U tj trCt nh -Dn hnh h0& -C3 in./\i
&]! hnh ph_ hRp &wa thiJt @U R& @iT! (ikn @yi 1p
GraphicsConfi$uration. Xv (b+-ut thiJt @U hiTn thU 2X)# &x thT th`&
hiEn tr0ng -ut *Q &hJ u -D! nh B :70,7=0,1: &010r*+ :70,7=0,29:
&010r*+ an( =00,:00,29: &010r*.
/Dn hnh 2X)# R& @iT! (ikn @yi -ut Qi tRng Graphics&evice
vD ang vi -\i &hJ u -D! &wa -Dn hnh 2X)# *Y R& @iT! (ikn @yi
-ut Qi tRng GraphicsConfi$uration./ut Qi tRng ;iT!
Graphics)nviron"ent &x thT @a0 g- 1 ha3 nhi"! Qi tRng
Graphics&evices. SgR& 1ei +-\i Qi tRng Graphics&evice &x thT &x 1
ha3 nhi"! Qi tRng ;iT! GraphicsConfi$urations.
(.%.% Transfor"s
Java 2D #P$ &x -ut &hJ u &h!3Tn ta u thQng nh]t. T]t &W &C& phcp
&h!3Tn ta u+@a0 g- &C& phcp &h!3Tn tt ;hjng gian ngzi *G (bng
Jn ;hjng gian &wa thiJt @U+"! R& @iT! (ikn @yi Qi tRng ;iT!
!ffineTransfor" .!ffineTransfor" Unh nghha &C& 1!t &h0 nhZng tha0
tC& trIn &C& hE ta u @ng &C& -a trnf&C& phcp @iJn i Wnh @ng &C& @u
1&g.
Cng &x thT thI- Qi tRng !ffineTransfor" &h0 &C& (eng ha @ng
&C& phcp ,0a3 +1]3 t 1E +&h!3Tn i h0& &^t ta u &h0 -ut -t hnh h&
httpBOOtai1i'!ha3.&0-
17
Lp trnh ha trn Java 2D v 3D
+vVn @Wn ha3 Wnh ;hi &hng R& tj trCt.CC& phcp @iJn i R& thI- vD0
nD3 *Y R& ang (bng &h0 &C& Qi tRng ha R& tj trCt tr0ng trzng
hRp x phcp @icn i nD3 R& th`& hiEn ;hi &h!3Tn tt ta u ;hjng gian
ngzi *G (bng *ang ;hjng gian &wa thiJt @U.
(.%.* +onts
/ut ,s! thzng R& hiT! 1D tp &C& ;v t` ta0 thDnh.ihi -ut ,s!
R& vY+ hnh (eng &wa nx *Y R& ,C& Unh @yi 60nt -D &hng ta
&hn.T!3 nhiIn+ hnh (eng -D 60nt *G (bng T hiTn thU 1In -Dn hnh ,s!
x ;hjng phWi 1& nD0 &ng giQng vi hnh (Cng &wa -\i ;v t` riIng @iEt.
vv (b *` ;Jt hRp &wa 2 ha3 nhi"! ;v t` thzng R& tha3 thJ @yi -ut hnh
(eng ;v hiI! nD0 x R& gi 1D ligature.
CC& hnh (eng -D -ut phjng &hZ *G (bng T @iT! (ikn &C& ;v t` tr0ng
-ut ,s! R& gi 1D glyphs. /ut 60nt &x thT @iT! (ikn -ut ;v t` nh &hZ
thzng h0& &hZ h0a @ng &C&h *G (bng nhi"! glyphs+ h0& @iT! (ikn &C&
1iIn ;Jt ;v t` nh fi &h @iT! (ikn @yi 1 glyph. Tr0ng Java 2D #P$+ -ut
g13ph &h n giWn 1D -ut (eng fShapeg -D &x thT `0& tha0 tC& vD tj trCt
-ut &C&h giQng nha! nh @]t ; vi &C& (eng ;hC& Shape.
/ut font &x thT R& ,'- nh tp &C& g13ph. /ut 60nt n &x thT &x
r]t nhi"! ;iT! ;hC& nha! nh ;Ti &hZ - +vta+nghiIng +gjtv&ht]t &W
&C& ;iT! &hZ nD3 tr0ng -ut 60nt &x &_ng thiJt ;J in vD &x thT vv nh
&hng 1D &C& thDnh viIn tr0ng &_ng -ut gia nh. Ka3 nxi &C&h ;hC& +-ut
nhx- &C& g13ph* vi &C& ;iT! riIng @iEt te0 nIn -ut (eng 60nt+nhx- &C&
(eng 60nt ta0 nIn -jt h 60nt +h &C& 60nt te0 nIn -ut tp 60nt vD tp nD3
&x *n tr0ng -ut Qi tRng Graphics)nviron"ent &b thT nD0 x.
Tr0ng Java 2D #P$+ &C& 60nt R& ,C& Unh @yi -ut tIn -D -j tW -ut
(eng 60nt riIng @iEt nD0 x+vv (b K'1v'ti&a >01(. Shng i"! nD3 1ei ;hC&
vi 6n -"- JDi 1.1 +&C& 60nt R& -j tW @ng &C& tIn 1jgv& -D Cnh ,e
trIn &C& (eng 60nt ;hC& nha! 6b th!u& 1iE! &C& (eng 60nt x &x *^n tr0ng
httpBOOtai1i'!ha3.&0-
19
Lp trnh ha trn Java 2D v 3D
-ji trzng ang ,ct ;hjng.Sh T tng thv&h &h0 i"! x th' Java 2D
#P$ h\ trR viE& ,C& Unh &C& 60nt @ng tIn 1jgv& &ng nh @ng tIn (eng
60nt.
2G (bng Java 2D #P$+ &x thT *0en thW0 vD tj rCt &C& ,s! @a0 g-
nhi"! 60nt th!u& &C& h 60nt+hnh (eng+;i&h th&+ vD ths- &hv &W ngjn
ngZ ;hC& nha!. CC& (eng &wa vVn @Wn R& 1! riIng @iEt -ut &C&h 1jgv&
vi *` *^p ,Jp &C& vVn @Wn.CC& Qi tRng 80nt R& *G (bng T -j tW &C&
hnh (eng hiTn thU &wa 60nt+ vD thjng tin *^p ,Jp R& 1! tr0ng Qi tRng
TextLa'out vD Text!ttri,uteSet . XiE& 1! gia &C& 60nt vD thjng tin *^p
,Jp riIng @iEt nha! 1D- (k (Dng hn &h0 viE& *G (bng &_ng 60nt &hZ
nhng ;hC& v" &]! hnh *^p ,Jp.
(.%.- ."a$es
nh R& te0 nIn tt tp &C& pi,'1 . /ut iT- Wnh ha3 -ut pixel *Y
Unh nghha thT hiEn &wa -ut Wnh tei v_ng !an *Ct &wa -Dn hnh . /ut
-Wng hai &hi"! &wa iT- Wnh R& gi 1D -ut raster.
ThT hiEn &wa -ut iT- Wnh &x thT R& Unh nghha -ut &C&h tr`& tiJp
h0& nh 1D -ut &h *Q tr0ng @Wng -D! (Dnh &h0 Wnh.
Tr0ng Wnh -D! a -D! fhn 29: -D!g &C& iT- Wnh thzng tr`& tiJp
@iT! (ikn 1!jn -D! *^& vD &C& & trng ;hC& &h0 -\i v_ng hiTn thU &wa
Wnh. ShZng Wnh nh v3 *Y &x ;v&h th& 1n hn Wnh -D! -D hiTn thU
@ng &h *Qfin(','(P&010r i-ag'*g+ nhng &hng nhn *Y tht hn .
Tr0ng Wnh -D! hiTn thU @ng &h *Q fin(','(P&010r i-ag'g+ nhZng
-D! *^& &wa Wnh *Y @U gii hen @yi @Wng -D! + vD thzng *Q 1Rng -D!
tr0ng @Wng -D! *Y vt hn *0vi Wnh tht. T!3 nhiIn &C& Wnh ;hi R& 1!
nh tp &C& &h *Q -D! *Y 1D- &h0 ;v&h th& Wnh nh i.[Unh (eng nD3
thzng R& (_ng &h0 nhZng Wnh &x 29: -D!.
nh tr0ng Java 2D #P$ &x hai thDnh phn &hvnh
DZ 1iE! Wnh thjf&C& iT- Wnhg
httpBOOtai1i'!ha3.&0-
1:
Lp trnh ha trn Java 2D v 3D
ShZng thjng tin &n thiJt &h0 !C trnh &h!3Tn i &C& iT- Wnh
CC& 1!t &h0 viE& &h!3Tn i &C& iT- Wnh R& 1! @yi Qi tRng
Coor/ode. [Qi vi -ut iT- Wnh T hiTn thU &n phWi i ;- vi -ut
;iT! -D! *^&.
/ut (Wi -D! 1D -ut thDnh phn &wa ;hjng gian -D! *^& (Dnh &h0
Wnh.Xv (b &C& thDnh phn -D! 1D &C& (a -D! tr0ng Wnh .)> . /ut
iT- Wnh tr0ng Wnh (_ng -D! tr`& tiJp &x thT R& hiT! nh -ut tp .
)xi 0ava.a1t.i"a$e @a0 g- -ut *Q phng tha& Coor/ode &h0
&C& @iT! (ikn thDnh phn iT- Wnh.
/ut Qi tRng CoorSpace &haa &C& 1!t T *a0 &h0 tp &C& giC trU
-D! tng ang vi -ut -D! *^& nh]t Unh .CC& phng tha& &wa
CoorSpace tr0ng 0ava.a1t.coor *Y @i! (ikn &C& ;hjng gian -D! *^&
thjng (bng+ g- &x ;hjng gian -D! .)> vD gra3 *&a1'. L! H rng -ut
;hjng gian -D! ;hjng phWi 1D -ut tp &C& -D! *^& -D tp nD3 Unh nghh
&C& 1!t T &x thT &h!3Tn i &C& giC trU -D! thDnh &C& -D! tng ang
thjng (U&h.
XiE& &hia ;hjng gian -D! *^& thDnh &C& &hJ u -D! *Y te0 nIn *` 1inh
h0et hn tr0ng viE& @iT! (ikn vD &h!3Tn i tt phcp @iT! (ikn -D! nD3
*ang -ut phJp @iT! (iYn -D! ;hC&.
(.%.2 +is and Strokes
Xi Java 2D #P$+ &x thT tj &C& hnh @Vng &C&h *G (bng &C& ;iT! @!t
;hC& nha! vD &C& ;iT! tj ;hC& nha!. X &C& &hZ ,ct &h0 &_ng &ng R&
@iT! (ikn @ng tp &C& g13ph+ nIn &C& ,s! ;v t` &ng &x thT R& vY vD tj.
CC& ;iT! @t R& Unh nghha @Vng &C& Qi tRng ;iT! 2tr0;'.Cx thT
,C& Unh u rung &ng nh &C& nct &h0 &C& zng thng vD zng &0ng.
CC& ;iT! tj R& Unh nghha @yi &C& phng tha& th!u& Qi tRng
Paint. Lp Coor &x *^n tr0ng &C& phiIn @Wn tr& &wa #LT s3 1D -ut
httpBOOtai1i'!ha3.&0-
1<
Lp trnh ha trn Java 2D v 3D
(eng n giWn &wa Qi tRng Paint R& *G (bng T Unh nghha tj -D!
trn f*01i( &010rg. Java 2D #P$ &!ng &]p thI- hai phng tha& -i &h0
Paint 1D TexturePaint vD GradientPaint. TexturePaint Unh nghha ;iT!
tj (_ng -! Wnh n giWnf*i-p1' i-ag' 6rag-'nt g -D R& 1p nh
nha!. GradientPaint Unh nghha -ut ;iT! tj -D! 10angfgra(i'ntg giZa
hai -D!.
Tr0ng Java 2D+ r'n('ring -ut zng nct &wa -ut hnh vD tj hnh x
@ng -ut ;iT! nD0 x R& th`& hiIn hai tha0 tC& riIng @iEtB
2G (bng -ut tr0ng &C& th!t t0Cn dra T r'n('r &C& zng nct
&wa hnh *G (bng &C& ;iT! @t R& ,C& Unh @yi &C& th!u& tvnh &wa
Stroke vD ;iT! tj R& ,C& Unh @yi th!u& tvnh !aint.
2G (bng phng tha& fill T tj &C& v_ng tr0ng &wa hnh vi ;iT!
tj (R& ,C& Unh.
ihi -ut &h!\i ;v t` R& r'n('r+&C& th!u& tvnh hiEn tei &wa Paint
`& Cp (bng &h0 &C& g13ph* te0 nIn &h!\i x.L! H th`& &h]t Qi tRng
dra"tring *Y tj &C& g13ph* -D R& r'n('r. [T vY &C& nct &wa &C& g13ph*
tr0ng &h!\i ;v t` &n phWi &hn &C& zng nct vD r'n('r &hng nh Qi
vi &C& hnh *G (bng phng tha& dra .
(.%.3 Co"posites
ihi r'n('r -ut Qi tRng -D &hng 1In -ut Qi tRng tn tai tr&
x &n phWi ,C& Unh 1D- thJ nD0 T ;Jt hRp -D! &wa &C& Qi t!Rng. Java
2D #P$ &x &C& 1!t &h0 viE& ;Jt hRp -D! tr0ng trzng hRp nD3 tr0ng Qi
tRng Co"posite.
T!3 nhiIn &x -ut *Q v]n " tr0ng &C&h tiJp &n nD3B
2Y tht ;hx tr0ng trzng hRp nJ! -D! #ed vD -D! Bue R& thI-
vD0 hs3 ;hjng R& thI- vD0.
XiE& ;Jt hRp 1jgv& *Y ;hjng R& h\ trR tr0ng trzng hRp &C&-D!
th!u& &C& ;hjng gian -D! ;hC& nha!.
httpBOOtai1i'!ha3.&0-
1=
Lp trnh ha trn Java 2D v 3D
2` ;Jt hRp *Y ;hjng &x H nghha tr0ng trzng hRp -D! R& @iT!
(ikn @ng &C& gia trU -D! th ;hi x *` ;Jt hRp hai iT- Wnh 1D *` ;Jt hRp
&wa hai giC trU -D!.
Java 2D #P$ trCnh &C& 10hi nD3 @ng &C&h th`& hiEn &C& 1!t pha trun
a1pha -D *Y a vD0 &C& thjng tin v" ;iT! @iT! (ikn iT- Wnh -\i ;hi
th`& hiEn ;Jt hRp -D!. /ut Qi tRng !phaCo"posite @a0 g- &C&
;iT! v" -D! *^& &wa &C& -D! *^& &wa ng!n vD v&h.
'ac()ard *%!pati+i&it, and P&at-%r! independence
Sh nxi+Java 2DA #P$ &x *` tng thv&h Qi vi phn -"- JDi
1.1 . XD Java 2DA #P$ 1D -ut ;iJn tr& &hvnh v v3 -D &C& ang (bng
&wa nx &x tvnh u& 1p v" -ji trzng
(.*.( Back1ard Co"pati,iit'
[T tng thv&h vi &C& tvnh nVng tn tei tr0ng ha JDi .Java
2D #P$ tVng &zng thI- -ut *Q tvnh nVng &h0 #LT @ng &C&h thI- &C&
phng tha& -i vD0 &C& 1p tn tei+-y rung thI- &C& 1p tn tei
vD ng thzi thI- &C& 1p -i vD &C& int'r6a&' -i -D ;hjng Wnh hyng
ti &C& #P$ hRp 1E.
Xv (b+Cx r]t nhi"! tvnh nVng &waJava 2D #P$ R& @^t ng!n tt viE&
-y rung &C& th!u& tvnh v" ha tr0ng Graphics%&. [T &!ng &]p &C&
th!u& tvnh -y rung v" ha tr0ng x @a0 g- &W 3J! tQ tng thv&h vi
&C& phn -"- ha ;hC&+ Graphics%& -y rung &C& 1p )raphi&*
tr0ng JDi1.1.
# paint
# paint$ll
# update
# print
httpBOOtai1i'!ha3.&0-
19
Lp trnh ha trn Java 2D v 3D
# print$ll
# get%raphi&s
JDi 1.1 app1't thjng (U&h ngZ &Wnh ha -D R& a vD0 nh 1D
-ut thT hiEn &wa 1p Graphics. [T &x thT tr!3 nhp nhZng &ha& nVng
R& th`& thi tr0ng Qi tRng Graphics%&+ th -ut app1't tng thv&h vi
Java 2D #P$ *Y a ngZ &Wnh ha ti Qi tRng Graphics%&B
public void Paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
...
...
g2.setTransform (t);
}
Tr0ng -jt vDi trzng hRp + ha3 ng hn 1D -y rung -ut 1p thta ;J+
Java 2D #P$ ;hCi !at hxa nx. Cx hai ;h th!t R& *G (bng T ;hCi
!at hxa &C& 1p ;J thtaB
/ut ha3 nhi"! 1p &ha R& &hn vD0 @iT! phsn &]p &wa 1p + vD
&C& 1p thta ;J R& &p nht T -y rung &C& 1p &ha -i. ih th!t nD3
R& *G (bng T thI- &C& phng tha& vD &C& (Z 1iE! thT hiEn &h0 1p ;J
thta.
/ut ha3 nhi"! triTn ;hai &C& int'r6a&' R& thI- vD0 1p ;J thta .
ih th!t nD3 R& *G (bng T thI- &C& phng tha& W0 tng !Ctfg'n'ra1
a@*tra&t -'th0(*g &h0 1p ;J thta .
Xv (b+ Java 2D #P$ ;hCi !Ct hxa 1p #LT .'&tang1' @ng &C&h *G
(bng &W hai ;h th!t 2` phsn &]p &h0 hnh &hZ nht giQng nhB
httpBOOtai1i'!ha3.&0-
20
Lp trnh ha trn Java 2D v 3D
Tr0ng phn -"- JDi 1.1 + #ectan$e 1D -ut Qi t!Rng -y rung n
giWn. >s3 giz -y rung &C& 1p #ectan$e%& -i vD triTn ;hai &W hai
int'r6a&' Shape vD Seriai4a,e. Kai 1p &ha R& thI- vD0 phsn &]p &wa
1p #ectan$e 1D #ectan$uarShape vD #ectan$e%&. CC& #pp1't R&
viJt &h0 phn -"- JDi 1.1 ;hjng tr!3 &p R& &C& 1p -i vD &C& phn
triTn ;hai &wa &C& int'r6a&'+nhng i"! nD3 ;hjng Wnh hyng @yi v 1p
#ectan$e vn @a0 g- &C& phng tha& vD &C& thDnh phn &x tr0ng &C&
phiIn @Wn tr&.
(.*.% Patfor" independence
Cx ;hW nVng phCp triTn &C& ang (bng u& 1p vi -ji trzng. Java 2D
#P$ ;hjng W- ng v" ;hjng gian -D! *^& ha3 1D &hJ u -D! &wa
thiJt @U r'n('ring vD Java 2D #P$ &x @]t ; Unh (eng Wnh &b thT nD0.
XD &h u& 1p v" 60nt ;hi &C& 60nt x R& ,s3 (`ng *nfR&
&!ng &]p nh 1D -ut phn &wa phn -"- JDi g+ha3 1D ;hi &hng R&
gyi te0 @ng 1p trnh. Java 2D #P$ ;hjng h\ trR &C& 60nt ,s3 (`ng *n
vD &C& 60nt R& te0 nIn nhz &hng trnh te0 60nt nhng nx 1ei h\ trR
viE& Unh nghha &C& 60nt thjng !a tp &C& g13ph &wa nx. /\i g13ph 1ei &x
thT R& Unh nghha @yi 2hap' -D @a0 g- &C& 0en zng thng vD &C&
zng &0ng. Cx r]t nhi"! ;iT! 60nt vi nhi"! hnh (ang vD ;i&h th&
R& @^t ng!n tt tp &C& g13ph n 1.
1.. The Java 2D/ 0P1 Pac(a"es
CC& 1p Java 2D #P$ R& t &ha& tr0ng &C& pa&;ag' *a!B
httpBOOtai1i'!ha3.&0-
21
Lp trnh ha trn Java 2D v 3D
5 0ava.a1t
5 0ava.a1t.$eo"
5 0ava.a1t.font
5 0ava.a1t.coor
5 0ava.a1t.i"a$e
5 0ava.a1t.i"a$e.rendera,e
5 0ava.a1t.print
Pa&;ag' Nava.a?t @a0 g- &C& 1p Java 2D #P$ " &p y trIn vD
&C& int'r6a&' tn tei tr& x vD &C& int'r6a&' 6Ct triTn thI-. f. (Dng
1D ;hjng phWi t]t &W &C& 1p tr0ng Nava.a?t 1D &C& 1p &wa Java 2D g
Pa&;ag' Nava.a?t.g'0- @a0 g- &C& &1a**' vD int'r6a&' &x 1iIn !an Jn
viE& Unh nghha &C& (eng hnh h& ng!3In thw3B
httpBOOtai1i'!ha3.&0-
22
Lp trnh ha trn Java 2D v 3D
Cx nhi"! (eng hnh h& ng!3In thw3 ang vi &C& phn
i-p1'-'ntati0n. +oat vD &ou,e
[i"! nD3 &h0 phcp &C& i-p1'-'ntati0n &x thT y hai -a& &hvnh ,C& 1D
giC trU sin$e vD dou,e.
)xi 0ava.a1t.font &haa &C& 1p vD &C& gia0 (iEn R& *G (bng &h0
viE& @Q trv vVn @Wn vD Unh nghha &C& ;iT! 60ntB
)xi Nava.a?t.&010r &haa &C& 1p vD &C& gia0 (iEn &h0 viE& Unh nghha
&C& ;hjng gian -D! vD &C& -! -D!B
CC& gxi 0ava.a1t.i"a$e vD 0ava.a1t.i"a$e.rendera,e &haa &C& 1p
vD &C& gia0 (iEn &h0 viE& Unh nghha vD te0 @xng &wa Wnh.
httpBOOtai1i'!ha3.&0-
25
Lp trnh ha trn Java 2D v 3D
Pa&;ag' 0ava.a1t.i"a$e tn tei tr0ng &C& v'r*i0n tr& x &wa #LT.
Java 2D #P$ tVng &zng thI- &C& 1p Wnh ;J thta tt #LT *a! s3B
Coor/ode
&irectCoor/ode
indexCoor/ode
CC& 1p &hJ u -D! *^& nD3 vn tn tei tr0ng pa&;ag'
0ava.a1t.i"a$e pa&;ag' &h0 *` tng thv&h .[T W- @W0 tvnh thQng
nh]t+&C& 1p &h0 &hJ u -D! -i &ng &x tr0ng pa&;ag' 0ava.a1t.i"a$e .
Pa&;ag' 0ava.a1t.print @a0 g- &C& 1p vD &C& int'r6a&' &h0 phcp in
t]t &W &C& (eng vVn @Wn + ha vD Wnh (`a trIn &jng nghE Java 2D.
httpBOOtai1i'!ha3.&0-
27
Lp trnh ha trn Java 2D v 3D
Chng 2:
Rendering with Graphi!2D
Graphics%& -y rung 0ava.a1t.Graphics T te0 ra i"! ;hiTn tinh vi
hn v" @iT! (ikn &C& hnh +vVn @Wn vD Wnh .F!C trnh tj trCt Java 2DA
R& i"! ;hiTn thjng !a Qi tRng Graphics%& vD &C& th!u& tvnh
treng thCi &wa nx.
CC& th!u& tvnh teng thCi Graphics%& + nh 1D &C& ;iT! zng thng vD
&C& phcp @iJn i+R& Cp (bng &h0 &C& Qi tRng ha ;hi &hng R&
tj trCt. Tp &C& th!u& tvnh treng thCi ;Jt hRp vi Graphics%& R& tha-
&hiJ! ti nh 1D Graphics%&Context.
[T tj trCt vVn @Wn +hnh vD Wnh+&n thiJt 1p Graphics%& &0nt',t vD *a!
x gi -ut tr0ng &C& phng tha& tj trCt Graphics%& nh (ra? ha3 6i11.
httpBOOtai1i'!ha3.&0-
29
Lp trnh ha trn Java 2D v 3D
2.1 *2c &p v3 "ia% di4n.
>Wng &h0 *a! s3 *Y 1iIt ;I &C& gia0 (iEn vD 1p tr0ng viE& ;Jt hRp
vi ngZ &Wnh Graphics%& &0nt',t+@a0 g- &C& 1p @iT! (ikn &C& th!u&
tvnh treng thCi. K! hJt &C& 1p nD3 1D -ut phn &wa pa&;ag' 0ava.a1t.
CC& gia0 (iEn vD -j tW &hngB
)ia0 (iEn /j tW
C0-p0*it' [Unh nghha &C& phng tha& &h0 viE& ;Jt hRp -ut
Qi tRng vY gQ& vi &_ng ha R& Cnh (]!.
[R& th`& thi @yi phng tha& #1phaC0-p0*it'.
C0-p0*it'C0nt',
t
[Unh nghha -ut -ji trng tQi ! vD u& 1p &h0
viE& th`& hiEn &C& phcp ;Jt hRp .XiE& th`& hiEn &C&
1!t ;Jt hRp t_3 &hn R& th`& hiEn @it ngzi 1p
trnh.
Paint /y rungB Tran*par'n&3
[Unh nghha &C& -D! *^& &h0 viE& tj h0& vY. [R&
th`& thi @yi Qi tRng C010r+)ra(i'ntPPaint vD
T',t!r'Paint.
PaintC0nt',t [Unh nghha -ut -ji trng tQi ! vD u& 1p &h0
viE& vY.CC& tha0 tC& vY R& t_3 &hn @yi ngzi 1p
trnh.
2tr0;' Te0 ra -ut Qi tRng 2hap' -D &C& zng vi"n &wa
nx `0& te0 @xng.[R& th`& thi @yi phng tha&
>a*i&2tr0;'.
CC& 1p vD -j tW * 1R& v" &hngB
Lp /j tW
#66in'Tran*60r-
fNava.a?t.g'0-g
/iI! tW -ut phcp @iJn i 2D a66in' +-D th`& hiEn
viE& Cnh ,e t!3Jn tvnh tt ta u 2D nD3 Jn ta u
2D ;hC&.
httpBOOtai1i'!ha3.&0-
2:
Lp trnh ha trn Java 2D v 3D
#1phaC0-p0*it' Th`& thi B C0-p0*it'
Th`& hiEn &C& 1!t ;Jt hRp &C& giC trU a1pha & @Wn &h0
&C& Qi tRng 2hap'+T',t vD $-ag'.
>a*i&2tr0;' Th`& thi B2tr0;'
[Unh nghha ;iT! @t vYf p'n *t31'g R& Cp (bng
&h0 &C& zng @a0 &wa Qi tRng 2hap'.
C010r Th`& thiB Paint
[Unh nghha -ut ;iT! tj -D! ng nh]t &h0 Qi tRng
2hap'.
)ra(i'ntPaint Th`& thiB Paint
[Unh nghha -ut -! tj -D! 10ang t!3Jn tvnh &h0 Qi
tRng 2hap'./! nD3 *Y tha3 i tt -D! C1 ftei iT-
P1g ti -D! C2ftai iT- P2g.
)raphi&*2D /y rungB )raphi&*
Lp & *y &h0 !C trnh te0 @xng tr0ng ;hjng gian
2D./y rung 1p gQ& Nava.a?t.)raphi&*
T',t!r'Paint Th`& thiB Paint
[Unh nghha -ut ;iT! tj th'0 -! &h0 Qi tRng
2hap'./! tj R& te0 ra tt! Qi tRng
>!66'r'($-ag'.
2.2 #enderin" *%ncepts
[T tj trCt -ut Qi tRng ha *G (bng Java 2DA #P$+ &n thiJt 1p
ngZ &Wnh Graphics%&Context vD *G (bng -ut tr0ng &C& phng tha& tj
trCt Graphics%& Qi vi Qi tRng.
Cx thT tha3 i &C& th!u& tvnh treng thCi -D te0 nIn ngZ &Wnh
Graphics%& nh B
Tha3 i u rung &wa nct @t
Tha3 i &h0 &C& nct @t ;Jt hRp vi nha! nh thJ nD0.
httpBOOtai1i'!ha3.&0-
2<
Lp trnh ha trn Java 2D v 3D
ThiJt 1p -ut ;h!ng &^t T gii hen v_ng R& tj trCt.
Ch!3Tn i ta u +,0a3+1]3 t 1E h0& &^t &C Qi tRng ;hi
&hng R& r'n('r.
[Unh nghha &C& -D! vD &C& ;iT! T tj &C& hnh.
rC& Unh &C& Qi tRng a haf-!1tip1' graphi&* 0@N'&t*g &n
phWi R& te0 ra nh thJ nD0.
Graphics%& Unh nghha -ut *Q phng tha& T thI- vD tha3 i &C&
th!u& tvnh tr0ng ngZ &Wnh ha . K! hJt nhZng phng tha& nD3 1D
nhZng Qi tRng @iT! (ikn &C& th!u& tvnh riIng @iEt nh Qi t`ng Paint
ha3 Stroke .
SgZ &Wnh Graphics%& &]t giZ &C& tha- &hiJ! ti &C& Qi tng th!u&
tvnh . SJ! @iJn i -ut Qi tRng th!u& tvnh -D 1D -ut phn &wa ngZ &Wnh
Graphics%& +th &n phWi gi phng tha& thiJt 1p ph_ hRp T ;hai @C0
ngZ &Wnh.Tha3 i -ut Qi tRng tr0ng !C trnh tha0 tC& r'n('r *Y gs3
nIn -ut *Q @iT! hiEn @]t thng thzng vD ;hjng n Unh .
%.%.( #enderin$ Process
ihi -ut Qi tRng ha R& r'n('r+ thjng tin v" hnh h& +Wnh vD
th!u& tvnh R& ;Jt hRp T tvnh t0Cn nhZng giC trU iT- Wnh &n phWi tha3
i trIn -Dn hiTn thU.
F!C trnh r'n('r &h0 -ut Qi tRng 2hap' &x thT R& &hia thDnh 7 @&
B
1. SJ! Qi tRng Shape R& ta nct +Qi tRng Stroke !3 vD0 ngZ
&Wnh Graphics%& R& *G (bng T te0 nIn -ut Qi tRng Shape -i
@a0 !anh nhZng zng nct x .
2. Ta u &wa zng th!u& Qi tRng Shape R& @iJn i tt ;hjng
gian ngzi *G (bng *ang ;hjng gian &wa thiJt @U th'0 &C& th!u& tvnh @iJn
i tr0ng ngZ &Wng ha Graphics%& .
httpBOOtai1i'!ha3.&0-
2=
Lp trnh ha trn Java 2D v 3D
5. [zng fpathg&wa Qi tRng 2hap' R& &^t @ @ng &C&h *G (bng
&C& th!u& tvnh &^t tr0ng ngZ &Wnh Graphics%&.
7. Phn &dn 1ei &wa Qi tRng Shape R& tj @Vng &C&h *G (bng
th!u& tvnh &wa Qi tRng Paint vD Co"posite th!u& tvnh tr0ng ngZ &Wnh
&wa Qi tRng Graphics%&.
Te0 @xng f.'n('ringg vVn @Wn tng ng vi viE& te0 @xng &C& Qi
tRng th!u& ;iT! Shape+ ;hi x vVn @Wn R& te0 @xng vi ttng g13ph vD
-\i g13ph 1D -ut Qi tRng th!u& ;iT! Shape. Ch &x i"! ;hC& 1D Java
2D #P$ phWi ,C& Unh Qi tRng +ont nD0 *G (bng &h0 vVn @Wn vD 1]3
;iT! g13ph tng ang tt Qi tRng +ont tr& ;hi te0 @xng.
[Qi vi Wnh th &x *` ;hC& @iEt + *` &h!3Tn i vD th`& hiEn &C& phcp
&^t @ vi hup ,C& Unh @iIn Wnhf i-ag'* @0!n(ing @0,g. Thjng tin v"
-D! *^& 1]3 tt &hvnh Wnh x vD ng!n a1phafa1pha &hann'1g R& *G (bng
;Jt hRp vi th!u& tvnh hiEn tei &wa Co"posite ;hi &C& iT- Wnh R&
hRp trIn @" -t te0 @xng.
%.%.% Controin$ #enderin$ 6uait'
Java 2D #P$ a ra &C& 1`a &hn &h0 phcp ngzi *G (bng te0 @xng
nhanh ha3 te0 @xng vi &h]t 1Rng &a0. ShZng tha- &hiJ! &wa ngzi *!
(bng R& ,C& Unh nh 1D &C& &h (n thjng !a th!u& tvnh &wa Qi tRng
#enderin$7ints tr0ng ngZ &Wnh &wa Qi tRng Graphics%& . ihjng phWi
t]t &W &C& -ji trzng "! h\ trR viE& tha3 i &hJ u te0 @xng v v3 ,C&
Unh &C& &h (n &h0 !C trnh te0 @xng *Y ;hjng R& W- @W0 &hng *Y
R& *G (bng ha3 ;hjng .
Lp .'n('ringKint* h\ trR &C ;iT! &h (n *a! s3B
#1pha int'rp01ati0n P &x thT thiJt 1p t_3 &hn ('6a!1t+ !a1it3+
*p''(.
#ntia1ia*ing P &x thT thiJt 1p t_3 &hn ('6a!1t B0n h0& 066.
httpBOOtai1i'!ha3.&0-
29
Lp trnh ha trn Java 2D v 3D
C010r .'n('ring P &x thT thiJt 1p t_3 &hn ('6a!1t+ !a1it3+ h0&
*p''(.
Dith'ring P &x thT thiJt 1p t_3 &hn ('6a!1tB(i*a@1'+ 'na@1'.
8ra&ti0na1 /'tri&* P &x thT thiJt 1p t_3 &hn ('6a!1t+ 0n+ h0& 066.
$nt'rp01ati0nP &x thT thiJt 1p t_3 &hn n'ar'*tPn'igh@0r+ @i1in'ar+
h0& @i&!@i&.
.'n('ring P &x thT thiJt 1p t_3 &hn ('6a!1t+ !a1it3+ h0& *p''(.
T',t antia1ia*ing P &x thT thiJt 1p t_3 &hn ('6a!1tB 0n h0& 066.
[T thiJt 1p h0& tha3 i &C& th!u& tvnh #enderin$7ints tr0ng ngZ
&Wnh &wa Qi tRng Graphics%& th gi phng tha& set#enderin$7ints.
ihi -ut &h (n R& thiJt 1p -V& Unh +-ji trzng te0 @xng -& Unh
*Y R& *G (bng .
89 thu:t " tr;n<!ntiaiasin$=
ihi &C& th`& thT & *y R& te0 @xng trIn thiJt @U hiTn thU +&C&
@iInf&enhg &wa &hng &x thT ;hjng trn ha3 nhC- 1D (0 th!u& tvnh
aliasing. CC& zng &!ng vD zng &hc0 &x (eng nhC- @yi v &hng
R& ,]p , @yi &C& iT- Wnh -D gn nh]t v" hn (eng vi &hng . [s3 1D
i"! -D &hng ta &x thT nhn th]3 vi &C& thiJt @U tr& s3 vi &C& &enh
nhC- ,!]t hiEn trCi ngR& h0Dn t0Dn vi &C& &enh trn &wa zgn n-
ngang ha3 thng ang.
$ntialiasing 1D -ut ;h th!t R& *G (bng T te0 @xng &C& Qi tRng
vi &C& &enh trn hn. Tha3 v *G (bng &C& iT- Wnh gn giQng vi &C&
zng &hc0 vD zng &0ng +tVng -t u &C& iT- Wnh @a0 !anh ti &C&
v_ng R& te0 @xng. [i"! nD3 1D- &h0 &C&h &enh trn hn vD trWi rung *`
&h!3Tn tiJp @tOt^t vi &C& pi,'1 a iT-f-!1ti pi,'1g . T!3 nhiIn ;h th!t
antia1ia*ing di hi nhi"! v" tDi ng!3In -C3 tvnh vD 1D- tVng thzi gian te0
@xng.
httpBOOtai1i'!ha3.&0-
50
Lp trnh ha trn Java 2D v 3D
%.%.* Stroke !ttri,utes
Te0 nct -ut Qi tRng th!u& ;iT! 2hap' nh Qi tRng GeneraPath
tng nng vi viE& *G (bng -ut @t 1jgv& th'0 &C& 0en &wa Qi tRng
GeneraPath. Th!u& tvnh &wa Graphics%&Stroke Unh nghha &C& tvnh
&h]t &wa nct @t vY.
[Qi tRng BasicStroke R& *G (bng T Unh nghha &C& th!u& tvnh
zng nct &h0 -ut ngZ &Wnh &wa Graphics%&. BasicStroke inh nghha
&C& th!u& tvnh nh u rung &!W nct vY +-! tj
[T thiJt 1p ha3 tha3 i &C& th!u& tvnh 2tr0;' tr0ng ngZ &Wnh &wa
Graphics%& th gi phng tha& setStroke.
Sh vv (!+Wnh ! tiIn tr0ng hnh 2P5 *G (bng -it'r N0inP*t31'+vD hnh
tha hai *G (bng ;iT! r0!n( N0inP*t31'+ a r0!n( 'n(&ap *t31'+ an( a (a*hing
patt'rn.
httpBOOtai1i'!ha3.&0-
51
Lp trnh ha trn Java 2D v 3D
CC& phng tha& te0 @xng Graphics%& &x *G (bng th!u& tvnh &wa
Stroke T vY nh dra$r&+ draLine+ dra'val+ dra!olygon+
dra!olyline+ dra(e&t+ vD
dra(ound(e&t.ihi -ut tr0ng &C& phng tha& R& gi th &C& zng
nct &wa Qi tRng Shape ,C& Unh *Y R& t0 @xng. Th!u& tvnh
Stroke Unh nghha &C& tvnh &h]t &wa zng thng vD &C& th!u& tvnh &wa
Paint Unh nghha -D! *^& ha3 -! &wa nct @t. Xv (b phng tha&
draf-3.'&tang1'g R& giB
1. Th!u& tvnh &wa Stroke *Y !3 Unh &h0 zng nct &wa hnh &hZ nht .
2. CC& zng nct nD3 *Y R& @iJn i thDnh -ut Qi tRng ;iT! Shape
.
5. [Qi tRng Paint i* R& Cp (bng&C& iT- Wnh th!u& -i"n gii hen
@yi zng @a0 &wa Qi t`ng Shape.
F!C trnh ,G 1H nD3 R& -inh he0 tr0ng hnh 2P7B
%.%.- +i !ttri,utes
Th!u& tvnh tj -D! tr0ng ngZ &Wnh Graphics%& R& @iT! (ikn @yi
Qi tRng Paint. Cx thT thI- -ut Qi tRng vD0 ngZ &Wnh &wa Qi tRng
Graphics%& f)raphi&*2D &0nt',tg @ng &C&h gi phng tha& set!aint.
ihi -ut Qi tRng Shape ha3 1D &C& g13ph R& vY f@yi &C& phng tha&
Graphics%&.dra+ Graphics%&.dra"tringg+
httpBOOtai1i'!ha3.&0-
52
Lp trnh ha trn Java 2D v 3D
[Qi tRng Paint nD3 *Y R& Cp (bng ti t]t &W &C& pi,'1 n- tr0ng
Qi tRng Shape -D @iT! (ikn &C& zng nct @a0 !anh Qi tRng . ihi
-ut Qi tRng 2hap' R& tj -D! fGraphics%&.fillg+ Qi tRng Paint
R& Cp (bng ti t]t &W &C& iT- Wnh n- tr0ng zng @a0 &wa Qi tRng
2hap'.
CC& ;iT! tj -D! ng nh]t n giWn f*01i( &010rg R& ;hyi te0 @yi
phng tha& setCoor.)olor 1D phn triTn ;hai fi-p1'-'ntati0ng n giWn
nh]t &wa gia0 tiJp Paint fPaint int'r6a&'g.
[T tj &C& hnh vi &C& ;iT! tj pha& tep hn nh 1D tj 10angfgra(i'ntg
vD tj (Et f t',t!r'g @ng &C&h *G (bng &C& 1p tr0ng Java 2D Paint 1D
GradientPaint vD TexturePaint. CC& 1p nD3 *Y 10ei @ &C& &jng viE&
tiI! tQn thzi gian T te0 &C& ;iT! tj pha& tep @ng &C&h *G (bng &C& ;iT!
tj -! ng nh]t n giWn .
ihi gi ph0ng tha& fill T te0 @xng -ut Qi tRng 2hap'+th hE
thQng *YB
1. rC& Unh &C& iT- Wnh nD0 T thT hiEn Qi tRng x.
2. rC& Unh -D! &h0 -\i iT- Wnh tt Qi t`Rng Paint.
5. Ch!3Tn &C& -D! nD3 ti giC trU iT- Wnh tng ang &h0 &C&
thiJt @U hiTn thU.
7. )hi &C& iT- Wnh ra thiJt @U hiTn thU x.
httpBOOtai1i'!ha3.&0-
55
Lp trnh ha trn Java 2D v 3D
Qu trnh x l theo phin
[T t &ha& hRp 1H !C trnh ,G 1H &C& iT- Wnh + Java 2D #P$ t &ha&
&hng th'0 ttng phiIn.
/\i phiIn &x thT 1D tp &C& iT- Wnh ;" nha! trIn -ut zng !ct
ha3 1D -ut ;hQi f@10&;g&C& iT- Wnh. F!C trnh ,G 1H th'0 phiIn R&
th`& hiEn th'0 2 @&B
1. Phng tha& &reate)ontext &wa Qi tRng paint R& gi T te0
-ut Qi tRng PaintContext. [Qi tRng PaintContext nD3 *Y 1! thjng
tin ngZ &Wnh v" tha0 tC& te0 @xng hiEn thzi vD nhZng thjng tin &n thiJt
T te0 ra &C& -D!. Phng tha& &reate)ontext -'th0( i* pa**'( th'
@0!n(ing @0,'* 06 th'graphi&* 0@N'&t @'ing 6i11'( in !*'r *pa&' an( in
('vi&' *pa&'+Qi tRng Coor/ode 1D ni T te0 &C& -D! *^&+vD th`&
hiEn !C trnh &h!3Tn i T Cnh ,e tt ;hjng gian ngzi *G (bng vD0
;hjng gian &wa thiJt @U. [Qi tRng Coor/ode ,'- nh -ut &h (n
;hjng phWi t]t &W &C& Qi tRng Paint &x thT h\ trR -ut Qi tRng
Coor/ode @]t ;.
2. Phng tha& get)olor*odel R& gi T nhn giC trU &wa Qi tRng
Coor/ode &h0 -D! vY tt Qi tRng PaintContext.
Phng tha& get(aster *a! x R& gi 1p 1ei nhi"! 1n T nhn giC
trU &wa Qi t`Rng .a*t'r -D @a0 g- (Z 1iE! -D! tht &h0 -\i phiIn.
Thjng tin nD3 pa**'( t0 th' n',t *tag' in th' r'n('ring pip'1in'+ -D vY
&C& -D! R& te0 @ng &C&h *G (bng Qi t`Rng Co"posite hiEn thzi .
%.%.2 Cippin$ Paths
/ut ;h!ng nhn *Y ,C& Unh phn &wa Qi tRng Shape ha3 ."a$e
&n R& te0 @xng . ihi -ut ;h!ng nhn 1D -ut phn &wa ngZ &Wnh &wa
Qi tRng Graphics%&+ th &h nhZng phn &wa Qi tRng Shape ha3
i"a$e n- tr0ng ;h!ng nhn x -i R& te0 @xng.
httpBOOtai1i'!ha3.&0-
57
Lp trnh ha trn Java 2D v 3D
[T thI- ;h!ng nhn &h0 ngZ &Wnh &wa Graphics%& th g0U phng
tha& setCip. >]t ; Qi tRng Shape &ng &x thT R& *G (bng T Unh
nghha -ut ;h!ng nhn.
[T thDnh i ;h!ng nhn &n phWi *G (bng phng tha& setClip T
,C& Unh -ut ;h!ng nhn -i ha3 1D gi phng tha& &1ip T tha3 i
;h!ng nhn &h0 phn gia0 nha! giZa ;h!ng nhn & vD -ut Qi tRng
Shape.
%.%.3 Transfor"ations
SgZ &Wnh &wa Qi tRng Graphics%& @a0 g- -ut phcp @icn i -D
R& *G (bng T @iJn i nhZng Qi tRng tt ;hjng gian ngzi *G (bng
vD0 ;hjng gian thiJt @U tr0ng !C trnh te0 @xng. [T th`& hiEn &C& phcp
@iJn i ;hC& nh phcp !a3 ha3 1]3 t 1E th &n phWi thI- &C& phcp @iJn
i ;hC& vD0 ngZ &Wnh &wa Qi tRng.CC& phcp @iJn i R& thI- vD0
nD3 *Y try thDnh -ut phn &wa Qng @iJn i fpip'1in' 06 tran*60r-ati0n*g
-D R& Cp(bng tr0ng *!jt !a trnh te0 @xng.
Graphics%& &!ng &]p -ut vDi &C&h ;hC& T tha3 i phcp @iJn i
tr0ng ngZ &Wnh &wa Qi tRng Graphics%& . CC&h n giWn nh]t 1D gi
-ut tr0ng &C& phng tha& @iJn i tr0ng Qi tRng Graphics%& nh B
rotate+ s&ale+ shear+ ha3 translate. rC& Unh &C& tvnh &h]t &wa phcp @iJn
i T Cp (bng tr0ng *!Qt a trnh te0 @xng vD Graphics%& t` ung te0
ra &C& tha3 i ph_ hRp.
Cng &x thT nQi -ut phcp @iJn i !ffineTransfor" vi phcp @iJn
i Graphics%& hiEn tei. Phcp @iJn i !ffineTransfor" th`& hiEn &C&
phcp @iJn i &h0 zng nh phcp (U&h+t 1E +!a3 vD &^t @ vi tp &C&
hnh & @Wn.
ihi -ut phcp @iJn i R& nQi vD0 phcp @iJn i tn tei tr& x
th phcp @iJn i *a! &_ng *Y R& ,C& Unh nh 1D phcp @iJn i R&
httpBOOtai1i'!ha3.&0-
59
Lp trnh ha trn Java 2D v 3D
th`& hiEn ! tiIn. [T tiJp nQi -ut phcp @iJn i vi phcp @iJn i hiEn
tei + 30! pa** an #66in'Tran*60r- t0 Graphics%&.transfor+.
Lp Graphics%& &ng @a0 g- phng tha& set,ransfor+ + nhng
phng tha& nD3 ;hjng @a0 giz R& *G (bng T nQi vi &C& phcp @iJn
i ta u ;hC& &wa phcp @iJn i ang tn tei. Phng tha& set,ransfor+
*Y ghi 1In phcp @iJn i hiEn thzi &wa Qi tRng Graphics%&+ nhng
phng tha& nD3 &n &h0 -jt *Q -b& v&h ;hC& nhB
{p (bng phcp @iJn i t 1E i"! &hnh &h0 -C3 in.
XY -ut Qi tRng >Co"ponent n0nP'r0 tran*1ati0n 6r0- it*
par'nt* 0rigin
Phxng t0 -ut thDnh phn T (k (Dng !an *Ct.
CC& tnh h!Qng ;hC& -D ngzi &!ng &]p Qi tRng )raphi&*2D
-!Qn &h!3Tn i &h0 !C trnh te0 @xng hiE! !W .
Phng tha& set,ransfor+ -'th0( R& ,'- nh T thiJt 1p Qi
tRng Graphics%& try 1ai phcp @iJn i @an ! *a! !C trnh te0 @xng
ha +vVn @Wn vD Wnh R& &h!3Tn iB
AffineTransform aT = g2d.getTransform();
g2d.transform(...);
g2d.draw(...);
g2d.setTransform(aT);
Graphics%& &ng &!ng &sp -ut phiIn @Wn v" (ra?i-ag' -D tr0ng x
Qi tRng !ffineTransfor"
[R& ,'- nh -ut tha- *Q . [i"! nD3 &h0 phcp Cp (bng -ut phcp
@iJn i &h0 Qi tRng Wnh ;hi nx R& vY -D ;hjng &n &hnh *Ga
zng Qng &!W phcp @iJn i. nh nD3 R& R& vY nh ;hi ;Jt nQi
httpBOOtai1i'!ha3.&0-
5:
Lp trnh ha trn Java 2D v 3D
phcp @iJn jit nD3 vi phcp @iJn jit hiEn tei tr0ng ngZ &Wnh &wa
Graphics%&
*2c ph5p +i6n 7i 89an h4:0--ine Trans-%r!s;
Java 2D #P$ &!ng &]p -ut 1p @iJn i 1D !ffineTransfor".
!ffineTransfor"s R& *G (bng T @iJn i vVn @Wn +hnh vD &C& Wnh
;hi &hng R& te0 @xng.
Cng &x thT ang (bng &C& phcp @iJn i &h0 Qi tRng +ont T te0 ra
&C& (n ,!]t 60nt -ifn'? 60nt ('rivati0n*g.
/ut phcp @iJn i ng nh]t fa66in' tran*60r-ati0ng th`& hiEn -ut phcp
@iJn i t!3Jn tvnh trIn tp he0 & @Wn. Sx 1!jn @iJn &C& zng thng
thDnh &C& zng thng vD &C& zng thng *0ng *0ng thDnh &C& zng
thng *0ng *0ng+t!3 nhiIn ;h0Wng &C&h giZa &C& iT- vD &C& gx& &wa &C&
zng thng ;hjng *0ng *0ng &x thT tha3 i.
CC& phcp @iJn i &x thT ;Jt hRp T te0 ra zng Qng &C& phcp @iJn
i -ut &C&h hiE! !W nh- Cp (bng &h0 -ut Qi tRng nD0 x. 2` ;Jt
hRp nD3 ,'- nh 1D *` -x& nQi. ihi -ut phcp @iJn i R& ;Jt nQi vi
-ut phcp @iJn i ang tn tei nh vi !ffineTransfor".&on&atenate+
th phcp @iJn i &!Qi &_ng R& ,C& Unh 1D phcp @iJn i ! tiIn R&
Cp (bng . /ut phcp @iJn i &ng &x thT R& -x& nQi tr& vi -ut
phcp @iJn i ang tn tei . Tr0ng trzng hRp nD3 th phcp @iJn i &!Qi
&_ng *Y R& th`& hiEn &!Qi &_ng . Phcp -x& nQi tr& R& R& Cp
(bng T th`& hiEn &C& phcp @iJn i &x 1iIn !an vi ;hjng gian thiJt @U
tha3 v ;hjng gian ngzi *G (bng. Xv (b &x thT *G (bng phng tha&
!ffineTransfor".pre)on&atenate T th`& hiEn phcp &h!3Tn i &x 1iIn
!an ti ;hjng gian &C& iT- Wnh..
2.2.6.1 Constructing an !!ine"rans!or#
httpBOOtai1i'!ha3.&0-
5<
Lp trnh ha trn Java 2D v 3D
!ffineTransfor" &!ng &]p -ut tp &C& phng tha& &h0 viE& ,s3
(`ng &C& Qi tRng !ffineTransfor".
# get,ranslateinstan&e
# get(otateinstan&e
# get"&aleinstan&e
# get"hearinstan&e
[T *G (bng &C& phng tha& nD3 &n phWi ,C& Unh &C& tvnh &h]t &wa
phcp @iJn i -D &n te0 ra vD 1p !ffineTransfor" *Y te0 ra &C& -a
trn &h!3Tn i ph_ hRp. Cng &x thT ,s3 (`ng phcp @iJn i dng nh]t
-ut &C&h tr`& tiJp -D ;hjng &n thjng !a 1p !ffineTransfor" @ng
&C&h ,C& Unh &C& thDnh phn &wa phcp @iJn i x.
%.%.? Co"posite !ttri,utes
ihi hai Qi tRng ha trng 1In nha! th i"! &n thiJt 1D phWi ,C&
Unh nhZng -D! nD0 *Y R& te0 @xng &h0 &C& iT- Wnh &hng 1In nha!.
Xv (b nJ! -ut hnh &hZ nht -D! vD -ut hnh &hZ nht -D! ,anh
&hng 1In nha! th &C& iT- Wnh x *Y &x -D! h0& -D! ,anh ha3 1D
*` ;Jt hRp &wa &W hai -D!. /D! &wa nhZng iT- Wnh tr0ng v_ng &hng
nha! x *Y ,C& Unh hnh &hZ nht nD0 n- trIn vD @U &h' ;h!]t nh thJ
nD0. F!C trnh ,G 1H T ,C& Unh -D! nD0 te0 @xng &h0 &C& iT- Wnh *Y
R& &hia *Y &h0 &C& Qi tRng &hng f0v'r1aping 0@N'&t*gR& gi
&o+positing.
Cx hai int'r6a&' te0 &C& ;iT! ;Jt hRp & @Wn tr0ng Java 2D 1D B
Co"posite vD Co"positeContext.
[T ,C& Unh &C& ;iT! ;Jt hRp *Y R& *G (bng th &n phWi thI- vD0
-ut Qi tRng !phaCo"posite &h0 ngZ &Wnh &wa Qi tRng
Graphics%& @ng &C&h gi phng tha& set)o+posite.
$lpha)o+posite+vD -ut triTn ;haifi-p1'-'ntati0ng &wa int'r6a&'
C0-p0*it' + &x h\ trR -ut *Q ;iT! ;Jt hRp ;hC& nha! . /\i Qi tRng &wa
httpBOOtai1i'!ha3.&0-
5=
Lp trnh ha trn Java 2D v 3D
1p nD3 1D -ut 1!t ;Jt hRp T -j tW *` pha trun -ut -D! -i vi -D!
ang tn tei..
/ut tr0ng nhZng 1!t ;Jt hRp tr0ng 1p #1phaC0-p0*it' 1D 2.CMX%.+
1!t nD3 &h ra -D! -i f-D! ng!ng *Y R& pha trun vi -D! ang tn
tei f-D! v&h g nh thJ nD0.
2.2.$.1 %anaging "ransparenc&
)iC trU alpha &wa -ut -D! 1D giC trU 0 tr0ng *!jt &wa -D! x +nx
&h ra fth'0 phn trV-g @a0 nhiI! phn trV- -D! tr& ;hi tj R& hiTn
thU ra ;hi &C& -D! &hng 1In nha!. CC& -D! tQi f&0 giC tri a1pha1.0g th
&C& -D! tj 1In &hng *Y ;hjng R& hiTn thU+ tr0ng ;hi x &C& -D!
tr0ng *!Qt f&x giC trU a1pha0.0g &h0 phcp &C& -D! tj 1In nx R& hiTn
thU.
ihi vVn @Wn vD hnh R& te0 @xng th giC trU a1pha *Y @^t ng!n tt
th!u& tvnh &wa Qi tRng Paint tr0ng ngZ &Wnh &wa Qi tRng
Graphics%& . ihi &C& hnh vD vVn @Wn R& 1D- trn th giC trU a1pha tt
th!u& tvnh Paint ftr0ng ngZ &Wnh &wa Graphics%&g R& ;Jt hRp vi
thjng tin v" &C& iT- Wnh @U &h' tt ra*t'ri'( path. CC& Wnh 1! thjng
tin v" giC trU a1pha &wa &hvnh nx .
ihi te0 -ut Qi tRng !phaCo"posite + &x thT ,C& Unh R& giC trU
a1pha R& thI- vD0 . ihi thI- Qi tRng !phaCo"posite nD3 ti ngZ
httpBOOtai1i'!ha3.&0-
59
Lp trnh ha trn Java 2D v 3D
&Wnh &wa Graphics%& +giC trU a1pha thI- vD0 nD3 *Y 1D- tVng giC trU tr0ng
*!Qt &wa @]t ; Qi tRng ha nD0 ;hi &hng R& te0 @xng P giC trU
a1pha &wa -\i Qi tRng ha R& nhsn 1In @yi giC trU a1pha &wa Qi
tRng !phaCo"posite.
2.2.$.2 "ransparenc& an' i#ages
CC& Wnh &x thT 1! thjng tin v" u tr0ng *!Qt &h0 -\i iT- Wnh &wa
nx. Thjng tin nD3 `0& gi 1D ;Inh a1phaf alpha &hannel+g +nx R& *G
(bng ;It* hRp vi Qi tRng Co"posite tr0ng ngZ &Wnh &wa Graphics%&
T pha trun -D! &wa Wnh x &C& ha ang tn tei.
2.< Thi6t &p Graphics2*%ntet
[T &]! hnh ngZ &Wnh Graphics%& &h0 !C trnh te0 @xng phWi *G
(bng &C& phng tha& ;hyi te0 &h0 Qi tRng Graphics%& T ,C& Unh
&C& th!u& tvnh nh .'n('ringKint*+ 2tr0;'+ Paint+C1ipping path+
C0-p0*it'+ an( Tran*60r-.
%.*.( Settin$ #enderin$ 7ints
[Qi tRng #enderin$7ints xng gxi t]t &C& tha- &hiJ! T ,C& Unh
-ut Qi tRng *Y R& te0 @xng nh thJ nD0 . [T te0 &C& &h (n &h0 !C
httpBOOtai1i'!ha3.&0-
70
Lp trnh ha trn Java 2D v 3D
trnh te0 @xng tr0ng ngZ &Wnh Graphics%& +th &n te0 -ut Qi tRng
#enderin$7ints vD &h!3Tn nx vD0 1p Graphics%&.set(endering
Te0 &h (n &h0 !C trnh te0 @xng *Y ;hjng W- @W0 viE& *Y *G (bng
-ut th!t t0Cn te0 @xng &b thTB ;hjng phWi -ji trzng &ng h\ trR &hJ u
te0 @xng .
Tr0ng vv (b &h0 *a! s3 th &h0 phcp *G (bng ;h th!t 1D- trn
fantia1ia*ingg vD te0 ra &C& tha- &hiJ! T ,C& Unh &h]t 1Rng &h0 !C
trnh te0 @xngB
qualityHints = new
RenderingHints(RenderingHints.KEY_ANTiALiAS
iNG,
RenderingHints.VALUE_ANTiALiAS_ON);
qualityHints.put(RenderingHints.KEY_RENDERi
NG,
RenderingHints.VALUE_RENDER_QUALiTY);
g2.setRenderingHints(qualityHints);
%.*.% Specif'in$ Stroke !ttri,utes
/ut Qi tRng BasicStroke *Y Unh nghha &C& tvnh &h]t !?0& Cp
(bng &h0 zng vi"n @a0 !anh -ut Qi tRng Shape+ g- &x u rung vD
;iT! zng f(a*hing patt'rng+T 1D- thJ nD0 &C& 0en thng R& ;Jt hRp
vi nha!. [T ;hyi te0 &C& th!u& tvnh v" zng nct tr0ng ngZ &Wnh
Graphics%& +th ;hyi te0 -ut Qi tRng BasicStroke vD &h!3"n nx vD0
phng tha& setStroke
2.(.2.1 Setting the Stro)e *i'th
[T ;hyi te0 u rung zng nct th ;hyi te0 Qi tRng BasicStroke vi
u rung -0ng -!Qn vD *a! x gi phng tha& set"tro-e
httpBOOtai1i'!ha3.&0-
71
Lp trnh ha trn Java 2D v 3D
Tr0ng vv (b &h0 *a! s3 +u rung zng nct R& ;hyi te0 vi 12
iT- vD giC trU -& Unh R& *G (bng &h0 viE& @Q trv ;iT! N0nt vD ;iT!
'n(&ap.
wideStroke = new BasicStroke(12.0f);
g2.setStroke(wideStroke);
2.(.2.2 Speci!&ing +oin an' ,n'cap St&les
[T ;hyi te0 &h0 &C& ;iT! N0in vD 'n(&ap +&n te0 -ut Qi tRng
BasicStroke vi &C& th!u& tvnh -0ng -!Qn .
Tr0ng vv (b &h0 *a! s3+u rung zng nct R& ;hyi te0 vi 12 iT-
vD &C& ;iT! N0in vD 'n(&ap R& *G (bng tha3 &h0 &C& gia tri -& UnhB
roundStroke = new BasicStroke(4.0f,
BasicStroke.CAP_ROUND,
BasicStroke.JOiN_ROUND);
g2.setStroke(roundStroke);
2.(.2.( Setting the Dashing -attern
CC& ;iT! zng pha& tep &x thT (k (Dng R& Unh nghha vi -ut Qi
tRng BasicStroke.
ihi te0 -ut Qi tRng BasicStroke +phWi ,C& Unh 2 tha- *Q T ;iT-
*0Ct ;iT! zngB
dash P 1D -ut -Wng @iT! (ikn ;iT! zng. CC& phn tG ,'n ;Y
&wa -Wng @iT! (ikn ;v&h th& nct ge&h vD ;h0Wng &C&h giZa &C& nct
ge&h .
Phn tG 0 @iT! (ikn nct ge&h ! tiIn+ phn tG tha 1 @iT! (ikn ;h0Wng
tr^ng ! tiIn.
httpBOOtai1i'!ha3.&0-
72
Lp trnh ha trn Java 2D v 3D
dashphase P 1D -ut 066*'t Unh nghha ni @^t ! &wa -! nct
ge&h.
Tr0ng vv (b *a! s3+ hai -! nct ge&h R& Cp (bng &h0 -ut zng
thng. Tr0ng -! tha nh]t +;v&h th& &wa &C& nct ge&h vD ;h0Wng trQng
giZa &hng 1D ;hjng tha3 i. /! tha hai th pha& tep hn +*G (bng
-Wng *C! phn tG T Unh nghha
float dash1[] = {10.0f};
BasicStroke bs = new BasicStroke(5.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOiN_MiTER, 10.0f, dash1,
0.0f);
g2.setStroke(bs);
Line2D line = new Line2D.Float(20.0f,
10.0f, 100.0f, 10.0f);
g2.draw(line);
float[] dash2 = {6.0f, 4.0f, 2.0f,
4.0f, 2.0f, 4.0f};
bs = new BasicStroke(5.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOiN_MiTER, 10.0f, dash2,
0.0f);
g2.setStroke(bs);
g2.draw(line)
CW hai -! "! *G (bng 066*'tfUa &h @^t ! &wa hai -!g 0 ;hi x
&C& nct ge&h ! tiIn *Y vU trv ! &wa -!. Kai -! nD3 R& -inh ha
tr0ng hnh2P<
httpBOOtai1i'!ha3.&0-
75
Lp trnh ha trn Java 2D v 3D
%.*.* Specif'in$ +i !ttri,utes
Th!u& tvnh &W! Qi tRng Paint tr0ng ngZ &Wnh Graphics%& ,C&
Unh &C& -D! tj ha3 &C& -! f;iT! gtj ;hi -ut Qi tRng vVn @Wn vD
2hap' R& te0 @xng.
2.(.(.1 .illing a Shape /ith a 0ra'ient
Lp GradientPaint &!ng &]p -ut &C&h n giWn T tj -ut hnh @ng
;iT! tj 10ang . ihi ;hyi te0 Qi tRng GradientPaint+ &n ,C& Unh vU trv
! tiIn &_ng vi -D! tj vD vU trv &!Qi &_ng -ut -D! tj. iiT! tj nD3 *Y
tha3 i t 1E tt -D! nD3 *ang -D! ;hC& (& th'0 zng nQi &wa hai vU trv
&hn+ -inh ha tr0ng hnh 2P=.
Tr0ng ngji *a0 tha @a+&W hai iT- "! n- tr0ng &_ng -ut hnh.T]t
&W &C& iT- (& th'0 zng tj 10ang -y rung !a iT- P1 *Y nhn R&
-D! @an ! vD &C& iT- (& th'0 zng tj 10ang R& -y rung ng0Di
iT- P2 *Y nhn -D! ;Jt th&.
CC& @& &n th`& hiEn T tj 10ang th'0 hai -D!B
1. ihyi te0 Qi tRng GradientPaint .
2. )i phng tha& Graphics%&.set!aint.
5. ihyi te0 Qi tRng Shape.
httpBOOtai1i'!ha3.&0-
77
Lp trnh ha trn Java 2D v 3D
Tr0ng vv (b *a! s3+ -ut hnh &hZ nht R& tj vi -! (Et n giWn
tt -ut Qi tRng @!66'r'( i-ag'.
GradientPaint gp = new
GradientPaint(50.0f, 50.0f, Color.blue
50.0f, 250.0f, Color.green);
g2.setPaint(gp);
g2.fillRect(50, 50, 200, 200);
2.(.(.2 .illing a Shape /ith a "exture
Lp T',t!r'Paint &!ng &]p -ut &C&h n giWn T tj hnh @ng -! 1p.
ihi te0 -ut Qi tRng >!66'r'(i-ag' T *G (bng nh 1D -ut -! tj. Cn
&h!3Tn hD- ;hyi te0 -ut hnh &hZ nht T Unh nghha tn *Q 1p &h0
-! +R& &hi ra tr0ng hnh 2P9.
[T tj hnh th'0 -! (EtB
1. Te0 Qi tRng TexturePaint
2. )i phng tha& Graphics%&.set!aint.
5. Te0 Qi tRng Shape.
7. )i phng tha& Graphics%&.fillf*hap'g.
Tr0ng vv (b *a! s3+ -ut hnh &hZ nht R& tj vi -! (Et
n giWn tt -ut Qi tRng ,ufferedi"a$e.
// Create a buffered image texture patch
of size //5x5
Bufferedimage bi = new Bufferedimage(5, 5,
Bufferedimage.TY!"i#T"$%B&'
%raphics() big = bi.create%raphics(&'
big.setCo*or(Co*or.green&'
httpBOOtai1i'!ha3.&0-
79
Lp trnh ha trn Java 2D v 3D
big.fi**$ect(+,+,5,5&'
big.setCo*or(Co*or.*ight%ra,&'
big.fi**-.a*(+,+,5,5&'
// Create a texture paint from the
buffered image
$ectang*e r = new $ectang*e(+,+,5,5&'
Textureaint tp = new
Textureaint(bi,r,Textureaint.#!/$!0T"#!i%1B-$&'
// /dd the texture paint to the graphics
context. g(.setaint(tp&'
// Create and render a rectang*e fi**ed
with the texture. g(.fi**$ect(+,+,(++,(++&'
2
%.*.- Settin$ the Cippin$ Path
[T Unh nghha -ut ;h!ng nhnB
1. ihyi te0 -ut Qi tRng Shape -D @iT! (ikn v_ng -!Qn te0
@xng.
2. )i phng tha& Graphics%&.set)lip T *G (bng Qi t!Rng
*hap' nh 1D -ut ;h!ng nhn &h0 ngZ &Wnh )raphi&*2D .
[T th! hp ;h!ng nhnB
1. ihyi te0 Qi tRng Shape -D gia0 vi ;h!ng hnn hiEn tei.
2. )i phng tha& &1ip T tha3 i ;h!ng nhn &h0 phn gia0
nha! &wa ;h!ng nhn hiEn tei vD Qi tRng Shape -i.
Tr0ng vv (b &h0 *a! s3+ -ut ;h!ng nhn R& te0 ra tt -ut '1ip vD
*a! x R& tha3 i @Vng &C&h gi phng tha& &lip.
public void paint(Graphics g) {
httpBOOtai1i'!ha3.&0-
7:
Lp trnh ha trn Java 2D v 3D
Graphics2D g2 = (Graphics2D) g;
// The width and height of the canvas
int w = getSize().width;
int h = getSize().height;
// Create an ellipse and use it as
the clipping path
Ellipse2D e = new
Ellipse2D.Float(w/4.0f,h/4.0f,
w/2.0f,h/2.0f);
g2.setClip(e);
// Fill the canvas. Only the area
within the clip is rendered
g2.setColor(Color.cyan);
g2.fillRect(0,0,w,h);
// Change the clipping path, setting
it to the intersection of
// the current clip and a new
rectangle.
Rectangle r = new
Rectangle(w/4+10,h/4+10,w/2-20,h/2-20);
g2.clip(r);
// Fill the canvas. Only the area
within the new clip
// is rendered
httpBOOtai1i'!ha3.&0-
7<
Lp trnh ha trn Java 2D v 3D
g2.setColor(Color.magenta);
g2.fillRect(0,0,w,h);
%.*.2 Settin$ the Graphics%& Transfor"
[T @iJn i Qi tRng Shape+,s! vVn @Wn+ ha3 Wnh &n phWi thI- vD0
-ut phcp @iJn i -i !ffineTransfor" &h0 zng Qng phcp @iJn i
tr0nh ngZ &Wnh &wa Graphics%& tr& ;hi te0 @xng . phcp @iJn i R&
Cp (bng ;hi Qi tRng ha R& te0 @xng .
Xv (b T vY -ut hnh &hZ nht nghiIng 79 uB
1. L]3 -ut phcp @iJn i Graphics%& tr& ;hi th`& hiEn @]t
; phcp @iJn i nD0 . L!jn gi phng tha& get,ransfor+
tr0ng Qi tRng Graphics%& tr& ;hi thI- vD0 -ut phcp @iJn
i &h0 ngZ &Wnh ha @yi v ngZ &Wnh ha &x thT tn
tei -ut phcp @iJn i &h0 -ut 1v (0 ;hC& +Unh vU 2?ing vD &C&
thDnh phn tr0ng -ut &Ga *.
2. L]3 phcp !a3 @ng &C&h gi !ffineTransfor".
get(otateinstan&e.
5. )i phng tha& Graphics%&.tran*60r- T thI- vD0 &C&
phcp @iJn i -i &h0 zng Qng @iJn i. ihjng R& *G
(bng phng tha& set,ransfor+ T thI- -ut phcp @iJn i ta
u -i+@yi v set,ransfor+ *Y ghi 1In phcp @iJn i hiEn tei
tr0ng ngZ &Wnh ha
1. 7.Te0 Qi tRng #ectan$e%&..loat .
7. )i phn tha& Graphics%&.dra T te0 @xng hnh &hZ
nht.
9. 2a! ;hi te0 @xng &h0 hnh &hZ nht R& @iJn i + th
r'*'t phcp @iJn i &wa Graphics%& try v" phcp @iJn i @an
httpBOOtai1i'!ha3.&0-
7=
Lp trnh ha trn Java 2D v 3D
! -D 1! tr0ng @& 1 @ng &C&h gi phng tha&
set,ransfor+ &h0 phcp @iJn i @an ! .
Tr0ng vv (b *a! s3+ -ut thT hiEn &wa !ffineTransfor" R& *G
(bng T !a3 hnh &hZ nht i 79 u ;hi nx R& te0 @xng.
AffineTransform aT = g2.getTransform();
Rectangle2D rect = new
Rectangle2D.Float(1.0,1.0,2.0,3.0);
AffineTransform rotate45 =
AffineTransform.getRotateinstance(Math.Pi
/4.0,0.0,0.0)
g2.transform(rotate45);
g2.draw(rect);
g2.setTransform(aT);
Cdn tr0ng vv (b nD3+-ut Qi tRng !ffineTransfor" R& *G (bng
T !a3 &C& &s! t',t ,!ng !ang -ut iT- tr!ng ts-.
// Define the rendering transform
AffineTransform at = new
AffineTransform();
// Apply a translation transform to
make room for the
// rotated text.
httpBOOtai1i'!ha3.&0-
79
Lp trnh ha trn Java 2D v 3D
at.setToTranslation(400.0, 400.0);
g2.transform(at);
// Create a rotation transform to
rotate the text
at.setToRotation(Math.Pi / 2.0);
// Render four copies of the string
Java at 90 degree angles
for (int i = 0; i < 4; i++) {
g2.drawString(Java, 0.0f, 0.0f);
g2.transform(at);
}
Cx thT @iJn i Wnh tr0ng &C&h tng t` Pphcp @iJn i tr0ng ngZ
&Wnh Graphics%& R& Cp (bng tr0ng !C trnh te0 @xng -D ;hjng &n
!an ts- Jn ;iT! Qi tRng he0 ang R& te0 @xng
[T Cp (bng phcp @iJn i &h0 Wnh -D ;hjng &n tha3 i phcp @iJn
i tr0ng ngZ &Wnh Graphics%& + th &h!3Tn !ffineTransfor" *ang
dra1i"a$eB
AffineTransform rotate45 =
AffineTransform.getRotateinstance(Math.Pi
/4.0,0.0,0.0)
g2.drawimage(myimage, rotate45);
CC& phcp @iJn i &ng R& Cp (bng &h0 Qi tRng 80nt T te0 ra
-ut ;iT!.
httpBOOtai1i'!ha3.&0-
90
Lp trnh ha trn Java 2D v 3D
%.*.3 Specif'in$ a Co"position St'e
/ut Qi tRng !phaCo"posite &haa &C& 1!t ;Jt hRp T ,C& Unh
&C& -D! *Y R& te0 @xng nh thJ nD0 ;hi Qi tRng nD! 1In Qi tRng
;hC& . [T ,C& Unh &C& ;iT! ;Jt hRp &h0 ngZ &Wnh Graphics%& + &n te0
-ut Qi tRng !phaCo"posite vD &h!3"n nx vD0 phng tha&
setCo"posite. iiT! thjng (bng nh]t 1D 2.CMX%..
2.(.6.1 Using the Source 1ver Co#positing 2ule
L!t ;Jt hRp 2.CMX%. *Y ;Jt hRp &C& iT- Wnh ng!n f*0!r&'
pi,'1g vi &C& iT- Wnh v&h f('*tinati0n pi,'1g. Xv (b +nJ! te0 @xng -ut
hnh &hZ nht -D! ,anh n& @iTn f@1!'g vD *a! x te0 @xng -ut hnh
&hZ nht -D! -D 1In -ut phn &wa hnh &hZ nht ;ia+th v_ng gia0
nha! x *Y &x -D! . Ka3 nxi &C&h ;hC& +Qi tng -D R& te0 @xng
&!Qi &_ng *Y ,!]t hiEn y trIn &_ng .
[T *G (bng 1!t ;Jt hRp 2.CMX%. B
1. Te0 -ut Qi tRng #1phaC0-p0*it' @ng &C&h gi phng
tha& g'tin*tan&' vD ,C& Unh 1!t
2.CMX%. .
#1phaC0-p0*it' a&
#1phaC0-p0*it'.g'tin*tan&'f#1phaC0-p0*it'.2.CMX
%.g
2. )i phng tha& *'tC0-p0*it' T thI- Qi t!Rng
#1phaC0-p0*it' &h0 ngZ &Wnh &wa )raphi&*2D.
g2.*'tC0-p0*it'fa&g
/\i ;hi Qi tRng ;Jt hRp nD3 R& thiJt 1p +th Qi tRng 1In
R& te0 @xng @ng &C&h *G (bng 1!t ;Jt hRp ,C& Unh.
2.(.6.2 3ncreasing the "ransparenc& o! Co#posite' 145ects
httpBOOtai1i'!ha3.&0-
91
Lp trnh ha trn Java 2D v 3D
!phaCo"posite &h0 phcp ,C& Unh -ut giC trU hng *Q a1pha thI-
vD0 -D R& nhsn vi giC trU a1pha &wa &C& iT- Wnh ng!n T tVng u
tr0ng *!Qt.
Xv (b +T ;hyi te0 -ut Qi tRng !phaCo"posite -D te0 @xng Qi
tRng ng!n &x u tr0ng *!Qt 1D 90 +,C& Unh -ut giC trU a1pha 1D .9B
AlphaComposite ac
=AlphaComposite.getinstance(AlphaComposite.SRC_OV
ER, .5f);
Tr0ng vv (b &h0 *a! s3+ a *0!r&' 0v'r a1pha &0-p0*it' 0@N'&t i*
&r'at'( ?ith an a1pha 06 .9 an( a(('( t0 th' graphi&* &0nt',t+ &a!*ing
*!@*'!'nt *hap'* t0 @'
r'n('r'( 90 tran*par'nt.
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.translate(100,50);
// radians=degree * pie / 180
g2.rotate((45*java.lang.Math.Pi)/180);
g2.fillRect(0,0,100,100);
g2.setTransform(new AffineTransform()); //
set to identity
// Create a new alpha composite
AlphaComposite ac =
httpBOOtai1i'!ha3.&0-
92
Lp trnh ha trn Java 2D v 3D
AlphaComposite.getinstance(AlphaComposite.SR
C_OVER,0.5f);
g2.setComposite(ac);
g2.setColor(Color.green);
g2.fillRect(50,0,100,100);
g2.setColor(Color.blue);
g2.fillRect(125,75,100,100);
g2.setColor(Color.yellow);
g2.fillRect(50,125,100,100);
g2.setColor(Color.pink);
g2.fillRect(-25,75,100,100);
}
2.. #enderin" Graphics Pri!itives
Graphics%& &!ng &]p &C& phng th& te0 @xng &h0 &C& & *y
ha nh Shapes+ Text+ vD i"a$esB
drate0 nct &h0 zng vi"n &wa Qi t`Rng Shape @ng &C&h *G
(bng &C& Qi tRng Stroke vD Paint tr0ng ngZ &Wnh Graphics%& .
filltj -ut Qi tRng 2hap' @ng &C&h *G (bng Qi tRng Paint
tr0ng ngZ &Wnh Graphics%& .
dra"tringte0 @xng &C& ,s! vVn @Wn (R& ,C& Unh @ng &C&h
* (bng Qi tRng Paint tr0ng ngZ &Wnh Graphics%& .
drai+agete0 @xng &C& Wnh R& ,C& Unh
2.4.1 Drawing a Shape
[zng @iIn &wa @]t ; Qi tRng Shape &ng R& te0 @xng @ng
phng tha& Graphics%&.dra.
httpBOOtai1i'!ha3.&0-
95
Lp trnh ha trn Java 2D v 3D
Phng tha& vY tt &C& phiIn @Wn tr& &ng R& h\ trR B draLine+
dra(e&t+ dra(ound(e&t+ dra'val+ dra$r&+dra!olyline+
dra!olygon+ dra3D(e&t.
ihi -ut Qi tRng Shape R& vY + th zng @iIn &wa nx *Y R& te0
nct @ng Qi tRng Stroke tr0ng ngZ &Wnh Graphics%&
>ng viE& thict 1p Qi tRng BasicStroke ph_ hRp tr0ng ngZ &Wnh
Graphics%& +thd &x thT vY zng thng vi u rung vD -! nct ge&h @]t
; . [Qi tRng BasicStroke &ng Unh nghha &C& th!u& tvnh end&ap vD
/oin &wa zng thng .
[T te0 @xng &h0 &C& zng @iIn &wa Qi tRng shapeB
1. ihyi te0 &h0 Qi tRng BasicStroke
2. )i phng tha& Graphics%&.set"tro-e
5. ihyi te0 &h0 Qi tRng Shape.
7. )i phng tha& Graphics%&.draf*hap'g.
Tr0ng vv (b *a!+Qi tRng GeneraPath R& *G (bng T Unh nghha
-ut ngji *a0 vD -ut Qi tRng BasicStroke R& thI- vD0 ngZ &Wnh
Graphics%& T Unh nghha &h0 &C& &enh &wa ngji *a0 vi &C& th!u& tvnh
/oin .
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
// create and set the stroke
g2.setStroke(new BasicStroke(4.0f));
// Create a star using a general path
object
httpBOOtai1i'!ha3.&0-
97
Lp trnh ha trn Java 2D v 3D
GeneralPath p = new
GeneralPath(GeneralPath.NON_ZERO);
p.moveTo(- 100.0f, - 25.0f);
p.lineTo(+ 100.0f, - 25.0f);
p.lineTo(- 50.0f, + 100.0f);
p.lineTo(+ 0.0f, - 100.0f);
p.lineTo(+ 50.0f, + 100.0f);
p.closePath();
// translate origin towards center of
canvas g2.translate(100.0f, 100.0f);
// render the star's path
g2.draw(p);
}
%.-.% +iin$ a Shape
Phng tha& Graphics%&.fill &x thT R& *G (bng T tj @]t ; Qi
tRng Shape. ihi -ut Qi tRng Shape R& tj+ th phn @U gii hen @yi
ng @a0 &wa Qi tRng *Y R& te0 @xng vi ngZ &Wnh Graphics%& &wa
th!u& tvnh !aint attri@!t'nh )olor+ ,exture!aint+ 0r %radient!aint.
Phng tha& tj tt &C& phiIn @Wn tr& x &wa phn -"- JDi &ng
R& h\ trRB fill(e&t0 fill3D(e&t0 fill(ound(e&t0 fill'val0 fill$r&0
fill!olygon0&lear(e&t1
[T tj -ut Qi tRng 2hap'B
1. rC& Unh -D! tj vD ;iT! tj tr0ng ngZ &Wnh ha @ng
&C&h *G (bng Graphics%&.set)olor ha3
Graphics%&.set!aint.
httpBOOtai1i'!ha3.&0-
99
Lp trnh ha trn Java 2D v 3D
1. ihyi te0 Qi tRng Shape.
2. )i phng tha& Graphics%&.fill T te0 @xng Qi t`ng
2hap'.
Tr0ng vv (b *a! s3 +phng tha& set)olor R& gi T Unh nghha
-D! tj 1D gr''n 6i11 &h0 -ut Qi tRng #ectan$e%&.
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.green);
Rectangle2D r2 = new
Rectangle2D.Float(25,25,150,150);
g2.fill(r2);
}
%.-.* #enderin$ Text
[T te0 @xng vVn @Wn +&n gi Graphics%&.dra"tring+ *a! x &h!3Tn
vD0 ,s! -D @en -!Qn te0 @xng
%.-.- #enderin$ i"a$es
[T te0 @xng vVn @Wn +&n gi Graphics%&.drai+age+ *a! x &h!3Tn
vD0 ,s! -D @en -!Qn te0 @xng .
2.= De-inin" *9st%! *%!p%siti%n #9&es
Cx thT te0 -ut ;iT! -i h0Dn t0Dn &wa phcp ;Jt hRp @Vng &C&h th`&
thi &C& int'r6a&' Co"posite vD Co"positeContext . /ut Qi tRng
Co"posite &!ng &]p -ut Qi tRng Co"positeContext -D th`& &h]t 1D
1! treng thCi vD th& hiEn &jng viE& ;Jt hRp. Shi"! Qi tRng
httpBOOtai1i'!ha3.&0-
9:
Lp trnh ha trn Java 2D v 3D
Co"positeContext &x thT R& te0 tt -ut Qi tRng Co"posite T 1!
&C& treng thCi riIng @iEt tr0ng -ji trzng a 1!ng f-!1tithr'a('(
'nvir0n-'nt.g
2.> #enderin" in a $9&ti?@creen Envir%n!ent
Tr0ngJavaT/ 2 2Di+ v'r*i0n 1.5+ Java 2DT/ #P$ h\ trR nhZng &]!
hnh a -Dn hiTn thi ;hC& nha! -D &x thT R& &]! hnh @yi -ut -ji
trzng -D B
Cx hai h0& nhi"! -Dn hnh u& 1p
Cx hai h0& nhi"! -Dn hnh ni &h &x -ut -Dn hnh &hvnh vD
&C& -Dn hiTn thU ;hC& *Y &0p3 nhZng hnh Wnh ,!Ct hiEn trIn -Dn
hnh &hvnh
Kai h0& nhi"! -Dn hnh -D &x (eng nh -ut -C3 W0 vD nx &h0
phcp gi &C& thiJt @U W0.
Java 2D #P$ &h0 phcp te0 &C& Qi tRng +ra"e+ >+ra"e@ Aindo1+
h0& >1indo1 .Xi -ut Qi tRng GraphicsConfi$uration T ,C& Unh
&C& thiJt @U hiTn thU &h0 !C trnh te0 @xng. Tr0ng &W @a &]! hnh+-\i thiJt
@U hiTn thU R& @iT! (ikn @yi -ut Qi tRng Graphics&evice./ut Qi
tRng Graphics&evice &x nhi"! Qi tRng GraphicsConfi$uration ;Jt
hRp vi nx .
ihi hai h0& nhi"! -Dn hnh R& *G (bng T te0 -ut thiJt @U W0 +hE
ta u W0 f-D tn tei u& 1p vi thiJt @U hiTn thU vt 1H gR& *G (bng T
@iT! (ikn thiJt @U W0 x . CC& @iIn &W! -\i Qi tRng
GraphicsConfi$uration tr0ng &]! hnh a -Dn hiTn thU &x !an hE vi
hE ta u W0 . /ut -Dn hiTn thU tr0ng -ji trzng nD3 R& ,C& Unh nh
1D -Dn hiTn thU &hvnh vD te vU trv f0+ 0g &wa hE ta u W0 . D`a trIn vU trv
&wa -Dn hiTn thU &hvnh +thiJt @U W0 &x thT &x ta u s- +nh tr0ng hnh 2P
10B
httpBOOtai1i'!ha3.&0-
9<
Lp trnh ha trn Java 2D v 3D
[T ,C& Unh nJ! 1D -ji trzng thiJt @U W0 ni -D -ut Qi tRng
Aindo1
ha3 +ra"e &x thT ,!]t hiEn trIn hai ha3 nhi"! -Dn hnh vt 1H +th gi
phng tha& get2ounds trIn -\i Qi tRng GraphicsConfi$uration
tr0ng hE thQng vD ;iT- tra nJ! gQ& ta u ;hC& vU trv f0+ 0g. Phng tha&
get2ounds &wa Qi tRng GraphicsConfi$uration trW v" -ut Qi tRng
hnh .'&tang1' tr0ng hE ta u W0 .X v3 +nJ! -ut gQ& ta u ;hjng phWi
vU trv f0+ 0g+ th -ji trzng x &hvnh 1D -ji trzng W0.
Tr0ng -ji trzng thiJt @U W0 +&C& ta u &wa &C& Qi tRng
GraphicsConfi$uration &x !an hE vi hE ta u W0 . X v3+ phWi *G
(bng ta u W0 ;hi gi phng tha& setLo&ation &wa Qi tRng +ra"e
ha3 Aindo1. Ch0 vv (b+[0en - nD3 *Y 1]3 zng @a0 &wa -ut Qi
tRng GraphicsConfi$uration vD *G (bng &C& zng @a0 T thiJt 1p vU
trv &wa Qi tRng +ra"e tei ta u f10+ 10g tr0ng hE ta u &wa -Dn hiTn
thU vt 1H .
Frame f = new Frame(GraphicsConfiguration
gc);
Rectangle bounds = gc.getBounds();
httpBOOtai1i'!ha3.&0-
9=
Lp trnh ha trn Java 2D v 3D
f.setLocation(10 + bounds.x, 10 +
bounds.y);
SJ! &C& zng @a0 &wa Qi tRng GraphicsConfi$uration ;hjng
R& tvnh Jn + th Qi tRng +ra"e R& hiTn thU tei vU trv f10+ 10g trIn
-D hnh vt 1H &hvnh + i"! nD3 &x thT ;hC& vi -D hnh vt 1H &wa Qi
tRng GraphicsConfi$uration R& ,C& Unh .
Phng tha& get2ounds &x thT R& *G (bng T ,C& Unh &C& zng
@iIn &W! thiJt @U W0. )i phng tha& get2ounds trIn -\i Qi tRng
GraphicsConfi$uration tr0ng hE thQng . [T ,C& (Unh &C& zng @a0 &W!
thiJt @U W0 + tvnh t0Cn *` ;Jt hRp &wa &C& zng @a0. ih th!t nD3 R& *G
(bng tr0ng vv (b *a!.
Rectangle virtualBounds = new
Rectangle();
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnviron
ment();
GraphicsDevice[] gs =
ge.getScreenDevices();
for (int j = 0; j < gs.length; j+
+) {
GraphicsDevice gd = gs[j];
GraphicsConfiguration[] gc =
gd.getConfigurations();
httpBOOtai1i'!ha3.&0-
99
Lp trnh ha trn Java 2D v 3D
for (int i = 0; i < gc.length; i+
+) {
virtualBounds =
virtualBounds.union(gc[i].getBounds());
}
}
#pp1't *a! *Y te0 -ut Qi tRng >+ra"e vi -\i Qi tRng
GraphicsConfi$uration &wa -\i Qi tRng Graphics&evice tr0ng Qi
tRng Graphics)nviron"ent. /\i Qi tRng >+ra"e hiTn thU -ut tp
&C& ve&h + ,anh - +,anh nhet+*Q 1Rng &C& -Dn hiTn thU *Q 1Rng &C&
Qi tRng GraphicsConfi$uration vD &C& zng @a0 &!W Qi tRng
GraphicsConfi$uration. [0en - *a! phWi R& &he3 vi JavaT/ 2
2Di+ v'r*i0n 1.5 h0& &a0 hn.
/*
* Transform.java
* 1.0
* 27/03/06
* Day la doan chuong trinh mieu ta cac phep bien
doi.
*/
import java.awt.*;
import javax.swing.*;
httpBOOtai1i'!ha3.&0-
:0
Lp trnh ha trn Java 2D v 3D
/*
* Chuong trinh nay tao bong mot hinh duoc chon
boi nguoi su dung.Voi cac phuong
* thuc paint,stroke, va rendering cung duoc lua
chon boi nguoi su dung.
*/
/**
* @author Administrator
*
*/
public class Transform extends JApplet implements
itemListener, ActionListener {
/**
*
*/
private static final long serialVersionUiD =
-2514519718222913151L;
JLabel primLabel, lineLabel, paintLabel,
transLabel, strokeLabel;
TransPanel display;
static JComboBox primitive, line, paint,
trans, stroke;
JButton redraw;
public static boolean no2D = false;
httpBOOtai1i'!ha3.&0-
:1
Lp trnh ha trn Java 2D v 3D
public void init() {
GridBagLayout layOut = new
GridBagLayout();
getContentPane().setLayout(layOut);
GridBagConstraints c = new
GridBagConstraints();
c.weightx = 1.0;
c.fill = GridBagConstraints.BOTH;
primLabel = new JLabel();
primLabel.setText("Hnh g c"); 3
Font newFont = getFont().deriveFont(1);
primLabel.setFont(newFont);
primLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(primLabel, c);
getContentPane().add(primLabel);
lineLabel = new JLabel();
lineLabel.setText("Cc ng"); 456
lineLabel.setFont(newFont);
lineLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(lineLabel, c);
getContentPane().add(lineLabel);
paintLabel = new JLabel();
paintLabel.setText("Ki u v "); 7 8
httpBOOtai1i'!ha3.&0-
:2
Lp trnh ha trn Java 2D v 3D
paintLabel.setFont(newFont);
paintLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(paintLabel, c);
getContentPane().add(paintLabel);
c.gridwidth =
GridBagConstraints.RELATiVE;
transLabel = new JLabel();
transLabel.setText("Cc php bi n i"); 9 4:
transLabel.setFont(newFont);
transLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(transLabel, c);
getContentPane().add(transLabel);
c.gridwidth =
GridBagConstraints.REMAiNDER;
strokeLabel = new JLabel();
strokeLabel.setText("T trt");
strokeLabel.setFont(newFont);
strokeLabel.setHorizontalAlignment(JLabel.CENTER)
;
layOut.setConstraints(strokeLabel, c);
getContentPane().add(strokeLabel);
httpBOOtai1i'!ha3.&0-
:5
Lp trnh ha trn Java 2D v 3D
GridBagConstraints ls = new
GridBagConstraints();
ls.weightx = 1.0;
ls.fill = GridBagConstraints.BOTH;
primitive = new JComboBox(new Object[]
{ "Hnh ch nh t", "Hnh elip", ; <
"V n b n" }); = >
primitive.additemListener(this);
newFont = newFont.deriveFont(0, 14.0f);
primitive.setFont(newFont);
layOut.setConstraints(primitive, ls);
getContentPane().add(primitive);
line = new JComboBox(new Object[]
{ "M nh", " m", "Nt t" }); > ?< 4@
line.additemListener(this);
line.setFont(newFont);
layOut.setConstraints(line, ls);
getContentPane().add(line);
paint = new JComboBox(new Object[]
{ " ng nh t", "T loang", "polka" }); ?A B
paint.additemListener(this);
paint.setFont(newFont);
layOut.setConstraints(paint, ls);
getContentPane().add(paint);
ls.gridwidth =
GridBagConstraints.RELATiVE;
httpBOOtai1i'!ha3.&0-
:7
Lp trnh ha trn Java 2D v 3D
trans = new JComboBox(new Object[]
{ "identity", "Quay", "T l ", C D
"shear" });
trans.additemListener(this);
trans.setFont(newFont);
layOut.setConstraints(trans, ls);
getContentPane().add(trans);
ls.gridwidth =
GridBagConstraints.REMAiNDER;
stroke = new JComboBox(new Object[]
{ " ng nt", "T y", ?56 4E
" ng nt va T y" }); ?56 4E
stroke.additemListener(this);
stroke.setFont(newFont);
layOut.setConstraints(stroke, ls);
getContentPane().add(stroke);
GridBagConstraints button = new
GridBagConstraints();
button.gridwidth =
GridBagConstraints.REMAiNDER;
redraw = new JButton("V l i"); 8 F
redraw.addActionListener(this);
redraw.setFont(newFont);
layOut.setConstraints(redraw, button);
getContentPane().add(redraw);
GridBagConstraints tP = new
GridBagConstraints();
httpBOOtai1i'!ha3.&0-
:9
Lp trnh ha trn Java 2D v 3D
tP.fill = GridBagConstraints.BOTH;
tP.weightx = 1.0;
tP.weighty = 1.0;
tP.gridwidth =
GridBagConstraints.REMAiNDER;
display = new TransPanel();
layOut.setConstraints(display, tP);
display.setBackground(Color.white);
getContentPane().add(display);
validate();
}
public void itemStateChanged(itemEvent e) {
}
public void actionPerformed(ActionEvent e) {
display.setTrans(trans.getSelectedindex());
display.renderShape();
}
@SuppressWarnings("deprecation")
public static void main(String[] argv) {
if (argv.length > 0 && argv[0].equals("-
no2d")) {
Transform.no2D = true;
}
httpBOOtai1i'!ha3.&0-
::
Lp trnh ha trn Java 2D v 3D
JFrame frame = new JFrame("Cc php
chuy n i"); 7 4:
frame.addWindowListener(new
WindowAdapter() {
public void
windowClosing(WindowEvent e) {
System.exit(0);
}
});
JApplet applet = new Transform();
frame.getContentPane().add(BorderLayout.CENTER,
applet);
applet.init();
frame.setSize(550, 400);
frame.show();
}
}
@SuppressWarnings("serial")
class TransPanel extends JPanel {
AffineTransform at = new AffineTransform();
int w, h;
httpBOOtai1i'!ha3.&0-
:<
Lp trnh ha trn Java 2D v 3D
Shape shapes[] = new Shape[3];
Bufferedimage bi;
boolean firstTime = true;
public TransPanel() {
setBackground(Color.white);
shapes[0] = new Rectangle(0, 0, 100,
100);
shapes[1] = new Ellipse2D.Double(0.0,
0.0, 100.0, 100.0);
TextLayout textTl = new
TextLayout("Brother Hood", new Font("Tomaha",
1, 76), new
FontRenderContext(null, false, false));
AffineTransform textAt = new
AffineTransform();
textAt.translate(0, (float)
textTl.getBounds().getHeight());
shapes[2] = textTl.getOutline(textAt);
}
public void setTrans(int transindex) {
switch (transindex) {
case 0:
at.setToidentity();
at.translate(w / 2, h / 2);
break;
httpBOOtai1i'!ha3.&0-
:=
Lp trnh ha trn Java 2D v 3D
case 1:
at.rotate(Math.toRadians(45));
break;
case 2:
at.scale(0.5, 0.5);
break;
case 3:
at.shear(0.5, 0.0);
break;
}
}
public void renderShape() {
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (!Transform.no2D) {
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
w = d.width;
h = d.height;
String instruct = "Nh p m t hnh c < G H
s ban u, ki u ng,ki u v , php bi n i,"; I 4E 7 456 7 8 9 4:
TextLayout thisTl = new
TextLayout(instruct, new Font("Helvetica",
httpBOOtai1i'!ha3.&0-
:9
Lp trnh ha trn Java 2D v 3D
0, 10),
g2.getFontRenderContext());
float width = (float)
thisTl.getBounds().getWidth();
float height = (float)
thisTl.getBounds().getHeight();
thisTl.draw(g2, w / 2 - width / 2,
15);
instruct = "v cc ph ng th c t o 5H @ F
bng sau nh n nt VE LAi."; 4 B
thisTl = new TextLayout(instruct,
new Font("Helvetica", 0, 10), g2
.getFontRenderContext());
width = (float)
thisTl.getBounds().getWidth();
thisTl.draw(g2, w / 2 - width / 2,
height + 17);
// initialize the transform.
if (firstTime) {
at.setToidentity();
at.translate(w / 2, h / 2);
firstTime = false;
}
// Sets the Stroke.
Stroke oldStroke = g2.getStroke();
httpBOOtai1i'!ha3.&0-
<0
Lp trnh ha trn Java 2D v 3D
switch
(Transform.line.getSelectedindex()) {
case 0:
g2.setStroke(new
BasicStroke(3.0f));
break;
case 1:
g2.setStroke(new
BasicStroke(8.0f));
break;
case 2:
float dash[] = { 10.0f };
g2.setStroke(new
BasicStroke(3.0f, BasicStroke.CAP_BUTT,
BasicStroke.JOiN_MiTER,
10.0f, dash, 0.0f));
break;
}
// Sets the Paint.
Paint oldPaint = g2.getPaint();
switch
(Transform.paint.getSelectedindex()) {
case 0:
g2.setPaint(Color.blue);
break;
case 1:
g2.setPaint(new GradientPaint(0,
0, Color.lightGray, w - 250,
httpBOOtai1i'!ha3.&0-
<1
Lp trnh ha trn Java 2D v 3D
h, Color.blue, false));
break;
case 2:
Bufferedimage buffi = new
Bufferedimage(15, 15,
Bufferedimage.TYPE_iNT_RGB);
Graphics2D buffig =
buffi.createGraphics();
buffig.setColor(Color.blue);
buffig.fillRect(0, 0, 15, 15);
buffig.setColor(Color.lightGray);
buffig.translate((15 / 2) - (5 /
2), (15 / 2) - (5 / 2));
buffig.fillOval(0, 0, 7, 7);
Rectangle r = new Rectangle(0,
0, 25, 25);
g2.setPaint(new
TexturePaint(buffi, r));
break;
}
// Sets the Shape.
Shape shape =
shapes[Transform.primitive.getSelectedindex()];
Rectangle r = shape.getBounds();
// Sets the selected Shape to the
center of the Canvas.
httpBOOtai1i'!ha3.&0-
<2
Lp trnh ha trn Java 2D v 3D
AffineTransform saveXform =
g2.getTransform();
AffineTransform toCenterAt = new
AffineTransform();
toCenterAt.concatenate(at);
toCenterAt.translate(-(r.width / 2),
-(r.height / 2));
g2.transform(toCenterAt);
// Sets the rendering method.
switch
(Transform.stroke.getSelectedindex()) {
case 0:
g2.draw(shape);
break;
case 1:
g2.fill(shape);
break;
case 2:
Graphics2D tempg2 = g2;
g2.fill(shape);
g2.setColor(Color.darkGray);
g2.draw(shape);
g2.setPaint(tempg2.getPaint());
break;
}
g2.setStroke(oldStroke);
g2.setPaint(oldPaint);
httpBOOtai1i'!ha3.&0-
<5
Lp trnh ha trn Java 2D v 3D
g2.setTransform(saveXform);
}
}
}
iJt !W *a! ;hi &he3 &hng trnh B
httpBOOtai1i'!ha3.&0-
<7
Lp trnh ha trn Java 2D v 3D
Chng "
C# $%i t&ng h'nh h(a
Java 2DA #P$ &!ng &]p -ut *Q 1p T Unh nghha &C& Qi tRng
g'0-'tri& fhnh h&g+&hng hen nh iT-+zng thng+zng
&0ng+hnh &hZ nht.ShZng 1p hnh h& -i x 1D -ut phn &wa gxi
0ava.a1t.$eo".[T &x thT tng thv&h vi &C& phiIn @Wn &+&C& 1p
$eo"etr' &x &haa tr0ng &C& phiIn @Wn tr& x &wa @u JDi *06t?ar'+nh
rectan$e+point vD po'$on+R& &haa tr0ng gxi 0ava.a1t.
CC& Qi tRng hnh h& tr0ng Java 2D #P$ nh GenneraPath+!rc%&
vD #ectan$e%& &h0 phcp th`& thi viE& te0 gia0 (iEn @E -t R& Unh nghha tr0ng
gxi 0ava.a1t.Knh (Cng &b thT &!ng &]p &h0 ta -ut phng tha& &h!ng &h0 viE&
-iI! tW vD ;iT- tra zng (n &wa &C& Qi tRng hnh h&./ut gia0 (iEn -i
Pathterator+&!ng &]p &C& phng tha& Unh nghha viE& ;hji phb& &C& phn tG tt
-ut Qi tRng hnh h&. 2G (bng &C& 1p hnh h& @en &x thT (k (Dng ,C& Unh vD
tha0 tC& vi nhi"! Qi tRng hai &hi"!.
<.1 Gia% di4n v3 &p.
>Wng (i s3 1iEt ;I nhZng gia0 (iEn vD &C& 1p &hvnh &wa &C& Qi
tRng hnh h&.K! hJt tr0ng *j &C& gia0 (iEn vD &C& 1p 1D thDnh phn
&wa gxi 0ava.a1t.$eo"./ut *Q+&hng hen nh Shape+1D thDnh phn &wa
gxi 0ava.a1t+thDnh phn &hvnh T &x thT tng thv&h vi &C& phiIn @Wn
tr& s3 &wa @u JDi.
CC& 1p vD gia0 (iEn &wa 0ava.a1t.$eo"
httpBOOtai1i'!ha3.&0-
<9
Lp trnh ha trn Java 2D v 3D
)ia0 (iEn /j tW
Path$t'rat0r [Unh nghha &C& phng tha& &h0 viE& phb& h$ &C&
phn tG tt -ut zng (n.
2hap'
fNava.a?tg
C!ng &]p -ut tp &C& phng tha& &h0 viE& -iI! tW
vD ;iT- tra zng (n hnh h&.[R& th`& thi @y$
)an'ra1Path vD &C& 1p hnh h& ;hC&.
CC& 1p
#r&2D #r&2D.D0!@1'
#r&2D.810at
/y rungB.'&tang!1ar2hap'
/iI! tW -ut zng &0ng R& Unh nghha @ng
-ut hnh &hZ nht &x gi$ hen+gx& @an !+vD
-ut ;iT! xng ;vn.XiE& th`& thi &h r nhZng
zng &0ng tr0ng ;iT! *Q 610at vD (0!@1'.
Chvnh ,C&B#r&2D.810at vD #r&2D.D0!@1'.#r'a
#r'a Lp th`& thiB2hap'+C10n'a@1'.
/iI! tW -ut (iEn tv&h hnh h& -D h\ trR &C&
phcp t0Cn nhU phsn.
C!@i&C!rv'2D
C!@i&C!rv'2D.D0!@1
'
C!@i&C!rv'2D.810at
$-p1'-'nt*B 2hap'
Lp th`& thiB2hap'.
/iI! tW &C& 0en zng &0ng tha- *Q @& @a
tr0ng ;hjng gian ta u.XiE& th`& thi T &h r
&C& zng &0ng @& @a v$ u &hvnh ,C& 610at vD
(0!@1' (0 hai 1pB C!@i&C!rv'2D.810at an(
C!@i&C!rv'2D.D0!@1'.
Di-'n*i0n2D [xng gxi &W &hi"! rung vD &hi"! &a0./ut *iI!
1p tr! tRng &h0 t]t &W &C& Q$ tRng 1! trZ
(_ng T 1! trZ &C& Q$ tRng hai &hi"!.
httpBOOtai1i'!ha3.&0-
<:
Lp trnh ha trn Java 2D v 3D
%11ip*'2D
%11ip*'2D.D0!@1'
%11ip*'2D.810at
/y rungB .'&tang!1ar2hap'
/iI! tW viE& Unh nghha zng 'P1ip @ng &C&
hnh &hZ nht gi$ hen.Cjng &b T &h r &C&
zng &0ng '1ip v$ u &hvnh ,C& 610at vD
(0!@1'B %11ip*'2D.810at vD %11ip*'2D.D0!@1'
81att'ningPath$t'rat0r TrW v" -ut 61att'n'( vi'? &wa -ut Qi tRng
PathLt'rat0r.
Cx thT *G (bng T &!ng &]p &C& 61att'ning
@'havi0r &h0 &C& Qi tRng 2hap' -D nx ;hjng
th`& hiEn viE& tvnh t0Cn &C& thDnh phn thI- vD0.
)'n'ra1Path Th`& thi Qi tRng 2hap'
/iI! tW -ut ;h!ng hinhg R& ,s3 (`ng tt &C&
zng thng vD &C& zng @& hai vD @& @a
Lin'2D
Lin'2D.D0!@1'
Lin'2D.810at
Th`& thi Qi tRng 2hap'.
/iI! tW -ut 0en thng tr0ng ;hjng gian ta u
f,+3g .[R& th& thi T ,C& Unh &C& zng thng
vi u &hvnh ,C& 610at vD (0!@1'BB Lin'2D.810at
vD Lin'2D.D0!@1'.
P0int2D
P0int2D.D0!@1'
P0int2D.810at
/ut iT- -iI! tW -ut vU trv tr0ng ;hjng gian ta
u f,+3g.[R& th`& thi T ,C& inh &C& iT- vi
u &hvnh ,C& 610at vD (0!@1'B P0int2D.810at vD
P0int2D.D0!@1'.
F!a(C!rv'2D
F!a(C!rv'2D.D0!@1
'
F!a(C!rv'2D.810at
Th`& thi Qi tRng 2hap'.
/iI! tW -ut 0en zng &0ng tha- *Q @& hai
tr0ng ;hjng gian ta u f,+3g.[R& th`& thi T
,C& Unh &C& zng @& hai vi u &hvnh ,C&
610at vD (0!@1'B F!a(C!rv'2D.810at vD
F!a(C!rv'2D.D0!@1'.
.'&tang1'2D /y rungB .'&tang!1ar2hap'
httpBOOtai1i'!ha3.&0-
<<
Lp trnh ha trn Java 2D v 3D
.'&tang1'2D.D0!@1'
.'&tang1'2D.810at
/iI! tW -ut hnh &hZ nht R& Unh nghha @yi
-ut vU trv f,+3g vD ;v&h th&f?+,+hg. [R& th`&
thi T ,C& inh &C& hnh &h nht vi u &hvnh
,C& 610at vD (0!@1'B .'&tang1'2D.810at vD
.'&tang1'2D.D0!@1'.
.'&tang!1ar2hap' Th`& thi Qi tRng 2hap'.
C!ng &]p *` tha0 tC& &h!ng &h0 &C& tC& ung 1In
&C& Qi tRng 2hap' -D nx &x &C& hnh &hZ nht
@iIn.
.0!n(.'&tang1'2D
.0!n(.'&tang1'2D.D
0!@1'
.0!n(.'&tang1'2D.81
0at
/y rungB .'&tang!1ar2hap'
/iI! tW -ut hnh &hZ nht &C& gx& R& 1D- trdn
R& Unh nghha @ng -ut vU trv f,+ 3g+-ut ;v&h
th& f? , hg+vD &hi"! rung vD &hi"! &a0 &wa
gx& &!ng. [R& th`& thi T ,C& inh &C& hnh &hZ
nht &x gx& trdn vi u &hvnh ,C& 610at vD (0!@1'B
.0!n(.'&tang1'2D.810at vD
.0!n(.'&tang1'2D.D0!@1'.
<.2 *2c (h2i ni4! hnh hcA
Shape 1D -ut thT hiEn &wa nhi"! 1p -D nx th`& thi Shape
int'r6a&'+nh
GeneraPath 0r #ectan$e%& .810at .
[zng vi"n f0!t1in'g &dn R&
Unh nghha 1D path.
ihi -ut Shape R& vY+;iT! zng nct vY R& Ung nghha @yi Qi
tRng Stroke tr0ng th viEn ha 2D+R& Cp (bng &h0 ShapeB*
path.ihi -ut Shape R& phw 3+Paint tr0ng th viEn ha 2D R&
Cp (bng &h0 phn (iEn tv&h @In tr0ng zng vi"n &wa nx.[T @iJt thI-
thjng tin+@en ,'- thI- phn .'n('ring ?ith )raphi&*2D.
httpBOOtai1i'!ha3.&0-
<=
Lp trnh ha trn Java 2D v 3D
[zng vi"n &wa -ut hnh &ng &x thT R& *G (bng T Unh nghha
-ut &lipping path./ut &lipping path ,C& Unh nhZng iT- Wnh nD0 R&
a rafr'n('rg. &lipping path 1D -ut phn &wa )raphi&* 2D. [T @iJt thI-
thjng tin+@en ,'- thI- phn 2'tting th' C1ipping Path.
/ut GeneraPath 1D -ut shape -D nx &x thT R& *G (bng
T -iI! tW -ut *Q Qi tRng 2 &hi"! &x thT R& vY tt &C& zng
vD &C& zng @& hai h0& @& @a.[T th!n 1Ri+ 0ava.a1t.$eo"
&!ng &]p thI- &C& thDnh phn th`& thi &wa gia0 tiJp 2hap' -D
nx -iI! tW &C& Qi tRng ha ph @iJn nh hnh &hZ
nht+hnh '1ip+&!ng trdn vD &C& zng &0ng. Th' Java2DA #P$ &dn
&!ng &]p -ut ;iT! *hap' & @iEt h\ trR &h0 viE& ,s3 (`ng (iEn tv&h hnh
h&.
*.%.( Constructive !rea Geo"etr'
C0n*tr!&tiv' #r'a )'0-'tr3 fC#)g 1D -ut !C trnh te0 ra &C& Qi
tRng hnh h& -i @ng viE& th`& hiEn &C& phcp t0Cn nhU phsn tr0ng &C&
Qi tRng tn tei.Tr0ng Java 2D #P$ -ut ;iT! & @iEt &wa Shape
R& gi 1D !rea h\ trR &C& phcp t0Cn nhU phsn.>en &x thT te0 ra -ut Qi
tRng !rea tt -ut *Q Shape.
CC& !rea h\ trR &C& phcp t0Cn nhU phsn *a!B
4ni0nfhRpg
int'r*'&ti0nfgia0g
2!@tra&ti0nftrtg
%,&1!*iv' M. frM.g fM. (Dnh riIngg
CC& phcp t0Cn x R& -iI! tW nh hnh 5P1 (i s3B
httpBOOtai1i'!ha3.&0-
<9
Lp trnh ha trn Java 2D v 3D
*.%.% Bounds and 7it Testin$
/ut 3ounding 3ox 1D -ut hnh &hZ nht @a0 @& h0Dn t0Dn -ut -ut
thT thiEn hnh h&. 3ounding 3ox R& *G (bng T !Jt Unh -ut Qi
tRng &x R& &hn ha3 ;hjng h0& R& hit @yi ngzi *G (bng.
)ia0 (iEn Shape ,C& Unh hai phng tha& &h0 viE& tr!3 1ei -ut
*hap'* @0!n(ing @0,+x 1D get2ounds vD get2ounds2D.Phng tha&
get2ounds2D trW v" -ut Qi tRng #ectan$e%& + -ut thT hiEn &wa
#ectan$e .C!ng &]p -ut u &hvnh ,C& &a0 hn tr0ng viE& -iI! tW
*hap'* @0!n(ing @0,.
Shape &ng &!ng &]p nhi"! phng tha& &h0 viE& ,C& Unh B
/ut iT- &b thT @In tr0ng @a0 xng &wa hnh
thTf&0ntain* g
/ut hnh &hZ nht &b thT n- h0Dn t0Dn @In tr0ng -ut
@a0 xng &wa hnh thT. f&0ntain* g
/ut hnh &hZ nht &b thT phsn &^t hnh thT fint'r*'&t* g
/*
* Composite.java
* 1.0
* 20/03/06
*/
import java.awt.*;
httpBOOtai1i'!ha3.&0-
=0
Lp trnh ha trn Java 2D v 3D
import javax.swing.*;
/*
* Chuong trinh nay la mot vi du ve cac luat ket
hop giua cac hinh.
*/
@SuppressWarnings("serial")
public class Composite extends JApplet implements
itemListener {
CompPanel comp;
JLabel alphaLabel, rulesLabel;
JComboBox alphas, rules;
String alpha = "1.0";
int rule = 0;
public void init() {
GridBagLayout layOut = new
GridBagLayout();
getContentPane().setLayout(layOut);
GridBagConstraints l = new
GridBagConstraints();
l.weightx = 1.0;
httpBOOtai1i'!ha3.&0-
=1
Lp trnh ha trn Java 2D v 3D
l.fill = GridBagConstraints.BOTH;
l.gridwidth =
GridBagConstraints.RELATiVE;
alphaLabel = new JLabel();
alphaLabel.setText("C ng m u"); 56 4G E
Font newFont = getFont().deriveFont(1);
alphaLabel.setFont(newFont);
alphaLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(alphaLabel, l);
getContentPane().add(alphaLabel);
getContentPane().setLayout(layOut);
l.gridwidth =
GridBagConstraints.REMAiNDER;
rulesLabel = new JLabel();
rulesLabel.setText("Cc lu t k t h p."); < 9 J
newFont = getFont().deriveFont(1);
rulesLabel.setFont(newFont);
rulesLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(rulesLabel, l);
getContentPane().add(rulesLabel);
GridBagConstraints a = new
GridBagConstraints();
a.gridwidth =
GridBagConstraints.RELATiVE;
a.weightx = 1.0;
httpBOOtai1i'!ha3.&0-
=2
Lp trnh ha trn Java 2D v 3D
a.fill = GridBagConstraints.BOTH;
alphas = new JComboBox();
layOut.setConstraints(alphas, a);
alphas.additem("1.0");
alphas.additem("0.75");
alphas.additem("0.50");
alphas.additem("0.25");
alphas.additem("0.0");
alphas.additemListener(this);
getContentPane().add(alphas);
a.gridwidth =
GridBagConstraints.REMAiNDER;
rules = new JComboBox();
layOut.setConstraints(rules, a);
rules.additem("SRC");
rules.additem("DST_iN");
rules.additem("DST_OUT");
rules.additem("DST_OVER");
rules.additem("SRC_iN");
rules.additem("SRC_OVER");
rules.additem("SRC_OUT");
rules.additem("CLEAR");
rules.additemListener(this);
getContentPane().add(rules);
GridBagConstraints fC = new
GridBagConstraints();
fC.fill = GridBagConstraints.BOTH;
fC.weightx = 1.0;
httpBOOtai1i'!ha3.&0-
=5
Lp trnh ha trn Java 2D v 3D
fC.weighty = 1.0;
fC.gridwidth =
GridBagConstraints.REMAiNDER;
comp = new CompPanel();
layOut.setConstraints(comp, fC);
getContentPane().add(comp);
validate();
}
public void itemStateChanged(itemEvent e) {
if (e.getStateChange() !=
itemEvent.SELECTED) {
return;
}
Object choice = e.getSource();
if (choice == alphas) {
alpha = (String)
alphas.getSelecteditem();
} else {
rule = rules.getSelectedindex();
}
comp.changeRule(alpha, rule);
}
public static void main(String s[]) {
JFrame f = new JFrame("K t h p"); 9 J
f.addWindowListener(new WindowAdapter() {
httpBOOtai1i'!ha3.&0-
=7
Lp trnh ha trn Java 2D v 3D
public void
windowClosing(WindowEvent e) {
System.exit(0);
}
});
JApplet applet = new Composite();
f.getContentPane().add("Center", applet);
applet.init();
f.pack();
f.setSize(new Dimension(300, 300));
f.show();
}
}
class CompPanel extends JPanel {
AlphaComposite ac =
AlphaComposite.getinstance(AlphaComposite.SRC);
float alpha = 1.0f;
public CompPanel() {
}
public void changeRule(String a, int rule) {
alpha = Float.valueOf(a).floatValue();
ac =
AlphaComposite.getinstance(getRule(rule), alpha);
repaint();
}
httpBOOtai1i'!ha3.&0-
=9
Lp trnh ha trn Java 2D v 3D
public int getRule(int rule) {
int alphaComp = 0;
switch (rule) {
case 0:
alphaComp = AlphaComposite.SRC;
break;
case 1:
alphaComp = AlphaComposite.DST_iN;
break;
case 2:
alphaComp = AlphaComposite.DST_OUT;
break;
case 3:
alphaComp = AlphaComposite.DST_OVER;
break;
case 4:
alphaComp = AlphaComposite.SRC_iN;
break;
case 5:
alphaComp = AlphaComposite.SRC_OVER;
break;
case 6:
alphaComp = AlphaComposite.SRC_OUT;
break;
case 7:
alphaComp = AlphaComposite.CLEAR;
break;
}
return alphaComp;
httpBOOtai1i'!ha3.&0-
=:
Lp trnh ha trn Java 2D v 3D
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
int w = d.width;
int h = d.height;
Bufferedimage buffimg = new
Bufferedimage(w, h,
Bufferedimage.TYPE_iNT_ARGB);
Graphics2D gbi =
buffimg.createGraphics();
g2.setColor(Color.white);
g2.fillRect(0, 0, d.width, d.height);
int rectx = w / 4;
int recty = h / 4;
gbi.setColor(new Color(0.0f, 0.0f, 1.0f,
1.0f));
gbi.fill(new Rectangle2D.Double(rectx,
recty, 150, 100));
gbi.setColor(new Color(1.0f, 0.0f, 0.0f,
1.0f));
gbi.setComposite(ac);
gbi.fill(new Ellipse2D.Double(rectx +
rectx / 2, recty + recty / 2,
httpBOOtai1i'!ha3.&0-
=<
Lp trnh ha trn Java 2D v 3D
150, 100));
g2.drawimage(buffimg, null, 0, 0);
}
}
8Jt !W &wa &hng trnh B
<.< *%!+inin" 0reas t% *reate Be) @hapes
CC& !rea &x thT R& *G (bng T te0 ra -ut &C&h nhanh &hxng
&C& Shape pha& tep nh &C& hnh trdn vD &C& hnh v!jng.Te0 -ut
hnh thT pha& tep -i @ng &C&h ;Jt hRp &C& !rea nh *a!B
1.2G (bng &C& Shape+te0 ra &C& !rea T ;Jt hRp 1ei.
2.)i &C& t0Cn tG nhU phsn thv&h hRpB add+su3tra&t +interse&t +
ex&lusive'r
Xv (b+C#) &x thT R& *G (bng T te0 ra !W 1I giQng nh hnh 5P2 (i
s3B
httpBOOtai1i'!ha3.&0-
==
Lp trnh ha trn Java 2D v 3D
CC&h th`& hiEnB
Thsn &wa !W 1I R& te0 ra @ng &C&h ;Jt hRp &C& tha0 tC& tr0ng 2
0v'rP 1apping #r'a* B &ir&le vD oval.CCi 1C R& te0 ra @ng &C&h th`&
hiEn -ut phcp gia0 trIn hai vdng trdn &hng 1In nha! vD *a! x R& a
vD0 -ut Shape n thjng !a phcp hRp.XiE& nep &hng &C& vdng trdn
&dn R& *G (bng T te0 &!Qng 1C thjng !a hai phcp trt.
Chng trnhB
/*
* @(#)Pear.java 1.0 27/03/06
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.JApplet;
import javax.swing.JFrame;
httpBOOtai1i'!ha3.&0-
=9
Lp trnh ha trn Java 2D v 3D
/*
* Chuong trinh nay ve mot qua le,su dung phuong
thuc ket hop giua cac vung.
*/
@SuppressWarnings("serial")
public class Pear extends JApplet {
Ellipse2D.Double circle, oval, leaf, stem;
Area circ, ov, leaf1, leaf2, st1, st2;
public void init() {
circle = new Ellipse2D.Double();
oval = new Ellipse2D.Double();
leaf = new Ellipse2D.Double();
stem = new Ellipse2D.Double();
circ = new Area(circle);
ov = new Area(oval);
leaf1 = new Area(leaf);
leaf2 = new Area(leaf);
st1 = new Area(stem);
st2 = new Area(stem);
setBackground(Color.white);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
httpBOOtai1i'!ha3.&0-
90
Lp trnh ha trn Java 2D v 3D
int w = d.width;
int h = d.height;
double ew = w / 2;
double eh = h / 2;
g2.setColor(Color.green);
leaf.setFrame(ew - 16, eh - 29, 15.0,
15.0);
leaf1 = new Area(leaf);
leaf.setFrame(ew - 14, eh - 47, 30.0,
30.0);
leaf2 = new Area(leaf);
leaf1.intersect(leaf2);
g2.fill(leaf1);
leaf.setFrame(ew + 1, eh - 29, 15.0,
15.0);
leaf1 = new Area(leaf);
leaf2.intersect(leaf1);
g2.fill(leaf2);
g2.setColor(Color.black);
stem.setFrame(ew, eh - 42, 40.0, 40.0);
st1 = new Area(stem);
stem.setFrame(ew + 3, eh - 47, 50.0,
50.0);
st2 = new Area(stem);
st1.subtract(st2);
g2.fill(st1);
g2.setColor(Color.yellow);
circle.setFrame(ew - 25, eh, 50.0, 50.0);
oval.setFrame(ew - 19, eh - 20, 40.0,
70.0);
httpBOOtai1i'!ha3.&0-
91
Lp trnh ha trn Java 2D v 3D
circ = new Area(circle);
ov = new Area(oval);
circ.add(ov);
g2.fill(circ);
}
public static void main(String s[]) {
JFrame f = new JFrame("Qu l"); >
f.addWindowListener(new WindowAdapter() {
public void
windowClosing(WindowEvent e) {
System.exit(0);
}
});
JApplet applet = new Pear();
f.getContentPane().add("Center", applet);
applet.init();
f.pack();
f.setSize(new Dimension(600, 400));
f.show();
}
}
iJt !W &wa &hng trnhB
httpBOOtai1i'!ha3.&0-
92
Lp trnh ha trn Java 2D v 3D
httpBOOtai1i'!ha3.&0-
95
Lp trnh ha trn Java 2D v 3D
Chng ):
*i+n th, -.nt v/ v0n 12n
>en &x thT *G (bng &C& phcp @iJn i vD &C& &jng &b (ra?ing &wa
Java 2DA #P$ vi vVn @Wn.Kn nZa+ Java 2DA #P$ &dn &!ng &]p &C&
1p 1iIn !an ti vVn @Wn h\ trR &C& i"! ;hiTn 60nt vD &C& &C&h @Q trv vVn
@Wn pha& tep.Sx &dn @a0 g- &W 1p +ont vD 1p TextLa'out.
Chng nD3 tp &h!ng vD0 ;hW nVng h\ trR &C& ;iT! 60nt vD &C& &C&h
@Q trv vVn @Wnft',t 1a30!tg @ng viE& *G (bng &C& gia0 (iEn vD &C& 1p
tr0ng 0ava.a1t vD 0ava.a1t.font.
[T &x thI- thjng tin v" phsn tv&h vVn @Wn+@en tha- ;hW0 thI- vVn
@Wn hng (n v" Nava.t',t vD th'0 (i phn Lriting )10@a1 Pr0gra-*
tr0ng @u Java T!t0ria1.
[T &x thI- thjng tin v" &C&h *G (bng &jng &b @Q trv vVn @Wn @ng &C&h
*G (bng 2?ing+@en ,'- thI- phn 0ava.a1t.s1in$.text vD 4*ing th'
J8CO2?ing Pa&;ag'* tr0ng Java T!t0ria1.
..1.Gia% di4n v3 &p.
>Wng (i s3 1iEt ;I &C& gia0 (iEn vD &C& 1p &hvnh *G (bng &h0 font
vD texta'out.K! hJt tr0ng *Q gia0 (iEn vD 1p nD3 1D thDnh phn &wa $i
ava.a1t.font./ut *Q+nh 80nt+1D -ut phn &wa gxi 0ava.a1t R& *G
(bng T W- @W0 tvnh tng thv&h vi &C& phiIn @Wn tr& x &wa @u JDi.
>Wng -j tW gia0 (iEn vD 1p B
)ia0 (iEn /iI! tW
/!1tip1'/a*t'
r
/iI! tW &C& 60nt ;iT! 1 vi nhi"! zng.[R& th`& thi
@yi &C& Qi tRng 80nt -D &hng 1D &C& ;iT! 60nt nhi"!
zng T &x thT tr!3 &p Jn &C& thiJt ;J i"! ;hiTn.
Mp'nT3p' /iI! tW &C& 60nt ;iT! -yfMp'n T3p'gvD ;iT! th`&fTr!'
httpBOOtai1i'!ha3.&0-
97
Lp trnh ha trn Java 2D v 3D
T3p'g.[R& th`& thi @yi &C& Qi tRng 80nt -D &hng 1D
&C& 60nt Mp'n T3p' h0& Tr!' T3p' &x thT tr!3 &p Jn
&C& @Wng 60nt* *6nt.
Lp /j tW
80nt
fNava.a?tg
/iI! tW -ut thT hiEn &wa @" -t 60ntf60nt 6a&'g
tt tp hRp &C& 60nt 6a&' &x *n tr0ng -C3.K\
trR viE& & tW &hi tiJt v" thjng tin 60nt vD &!ng
&]p ;hW nVng tr!3 &p ti &C& thjng tin v" &C&
;iT! 60nt vD &C& zng nct &wa nx.
80nt.'n('rC0nt',t [xng gxi thjng tin &n thiJt &h0 &C& phcp 0 vVn
@Wn -ut &C&h &hvnh ,C&.
)13phJ!*ti6i&ati0n$n60 /iI! tW &C& thjng tin v" & tvnh &Vn 1" &wa -ut
zng nct+nh trng 1Rng f&hZg+u ! tiIn+*`
th! ht vD gii hen.
)13ph/'tri&* C!ng &]p &C& phcp 0 &h0 -ut zng nct n.
)13phX'&t0r /ut tp hRp &C& zng nct vD &C& vU trv.
)raphi&#ttri@!t' LD 1p & *y &h0 th!u& tvnh T',tLa30!t -D nx
& tW -ut Qi tRng )raphi&* T R& nh!ng(
vD0 vVn @Wn.[R& th`& thi @yi
2hap)aphi&#ttri@!t' vD
$-ag')raphi&#ttri@!t'+-D nx &x thT &h0 phcp
&C& Qi tRng 2hap' vD Qi tRng $-ag' nhng
vD0 -ut Qi tRng T',tLa30!t.Cx thT phsn 1p
T th`& thi ;v t` t_3 &hn T tha3 thJ &C&
graphi&.
$-ag')raphi&#ttri@!t' /y rungB)raphi&#ttri@!t'
/ut Qi tRng )raphi&*#ttri@!t' R& *G (bng
T vY &C& Wnh @In tr0ng -ut T',tLa30!t.
Lin'>r'a;/'a*!r'r Chia -ut ;hQi vVn @Wn thDnh nhi"! (dng tr0ng
&C& Qi tRng T',tLa30!t -D nx ;hit @In tr0ng
-ut (0ng.
httpBOOtai1i'!ha3.&0-
99
Lp trnh ha trn Java 2D v 3D
Lin'/'tri&* C!ng &]p ;hW nVng tr!3 &p Jn &C& th& 0
60nt &n thiJt T hiTn thU &C& ;v t` trIn -ut hDng
vD hiTn thU tp &C& hDng x.CC& th& 0 @a0
g- phn nhj 1In+phn phva (i+phn -+&hi"!
&a0 vD thjng tin zng & @Wnfa*&'nt+ ('*&'nt+
1'a(ing+ h'ight+ an( @a*'1in' in60r-ati0ng.
2hap')raphi&#ttri@!t' /y rungB)raphi&#ttri@!t'
/ut Qi tRng )raphi&*#ttri@!t' R& *G
(bng T vY &C& Qi tRng 2hap' tr0ng -ut Qi
tRng T',tLa30!t
T',t#ttri@!t' [Unh nghha &C& th!u& tvnh !an trng vD &C& giC
trU R& *G (bng &h0 viE& te0 @xng vVn @Wnft',t
r'n('ringg.
T',tKit$n60 /iI! tW thjng tin hit t'*t &h0 &C& ;v t` tr0ng -ut
Qi tRng T',tLa30!t
T',tLa30!t Th`& thiBC10n'a@1'
C!ng &]p -ut *` @iT! (ikn ha &Q Unh &wa
&C& (Z 1iE! ;v t` R& Unh ;iT!+@a0 g- &W
&C& vVn @Wn hai &hi"!.
..2.*2c (h2i ni4! vC D%nt
Lp +ont R& &Wi tiJn T h\ trR viE& & tW &hi tiJt thjng tin v"
;iT! 60nt vD &x thT *G (bng &C& & tvnh pha& tep.
/ut Qi tRng +ont -iI! tW -ut thT hiEn &wa ;iT! 60nt tr0ng tp hRp
&C& 60nt &wa hE thQng.CC& 60nt thng ha3 R& *G (bng nh 60nt K'1v't
>01( vD C0!ri'r >01( ita1i&.
Cx @a ;iT! tIn &h0 -ut Qi tRng 80ntPx 1D 10gi&a1 na-'+ 6a-i13
na-'+ vD 60nt 6a&' na-'B
httpBOOtai1i'!ha3.&0-
9:
Lp trnh ha trn Java 2D v 3D
/ut 10gi&a1 na-' &wa Qi tRng +ont 1D tIn R& Cnh ,e Jn -ut
tr0ng nhi"! 60nt &b thT &x *n tr0ng p1at60r-. 10gi&a1 na-' 1D tIn 60nt
R& *G (bng T &h r -ut Qi tRng +ont tr0ng JDi 1.1 vD &C& phiIn
@Wn tr& x.ihi &h Unh -ut Qi tRng 80nt tr0ng JavaA 2 2Di @en
nIn *G (bng 60nt 6a&' na-' tha3 &h0 10gi&a1 na-'.>en &x thT nhn
10gi&a1 na-' tt Qi tRng 60nt @ng &C&h g0i N phng tha& get4a+e.[T
nhn R& (anh *C&h &C& 10gi&a1 na-'+h3 gi
0ava.a1t.Tookit.$et+ontList.
*5t fa+ily na+e &6a 7i t89ng .ont 1D tIn tr0ng h 60nt -D nx Unh
nghha &C&h thiJt ;J viE& in thjng !a -ut *Q @" -t+&hng hen nh ;iT!
&hZ K'1v'ti&a.>en 1]3 h tIn 60nt @ng &C&h *G (bng phng tha&
get.a+ily.
*5t font fa&e na+e &6a 7i t89ng .ont (_ng T C- &h ;v&h th&
tht &wa 60nt R& &Di t tr0ng hE thQng.[x 1D tIn -D @en &x thT *G (bng
;hi &h r -ut ;iT! 60nt tr0ng Java 2 2Di.Sx &ng thzng R& C- &h
&h0 60nt na-'.>en &x thT 1]3 tIn 60nt @ng &C&h gi phng tha&
ge.ont4a+e.[T ,C& Unh ;iT! 60nt nD0 R& *G (bng tr0ng hE thQng+@en
&x thT gi phng tha& Graphics)nviron"ent.get$ll.onts.
>en &x thT tr!3 ,!]t &C& thjng tin v" -ut Qi tRng 80nt @ng viE&
gi phng tha& get$ttri3utes. CC& th!u& tvnh &wa 80nt @a0 g- tIn+;v&h
& 60nt+tran*60r-+& tvnh 60nt nh hnh (Cng 60nt.
/ut Qi tRng Line/etrics xng gxi &C& thjng tin v" &C& *Q 0 &wa
80nt+nh a*&'nt+('*&'nt vD ;h0Wng &C&h giZa &C& (dng &hZ.
scent 1D ;h0Wng &C&h tt zng @a*'1in' Jn zng
a*&'n('r.ih0Wng &C&h nD3 -iI! tW &hi"! &a0 &wa &C& &hZ viJt h0a+nhng
-ut *Q ;v t` &x thT -y rung v" phva trIn &wa zng a*&'n('r.
Descent 1D ;h0Wng &C&h tt zng @a*'1in' Jn zng
('*&'n('r.[iT- th]p nh]t &wa h! hJt &C& ;v t` *Y n- @In tr0ng
httpBOOtai1i'!ha3.&0-
9<
Lp trnh ha trn Java 2D v 3D
('*&'nt+nhng &x -ut *Q ;v t` &x thT -y rung v" phva (i &wa zng
('*&'n('r.
6ea'ing R& nxi ti nh 1D ;h0Wng &C&h tt C3 &wa zng
('*&'n('r Jn nh &wa (dng tiJp th'0.
Thjng tin nD3 R& *G (bng T Unh vU -ut &C&h &hvnh ,C& &C& ;v
t` (& th'0 -ut (dng+vD &C& zng &x thT 1iIn !an Jn &C& zng ;hC&.
>en &x thT tr!3 ,!]t nhZng phcp 0 &C& 1in' @ng viE& *G (bng &C&
phng tha& get$s&ent+ getDes&ent+ vD getLeading .>en &ng &x thT
tr!3 ,!]t thjng tin vI ?'ight+ @a*'1in' vD !n('r1in' &wa +ont thjng !a
Line/etrics.
..< *2c (h2i ni4! vC Tet La,%9t.
Tr& ;hi -ut 0en &hZ &x R& hiTn thU+nx &n phWi R& &h r v"
hnh (Cng &ng nh vU trv hiTn thU @ng viE& *G (bng &C& nct &hZ vD &C&
&C&h ;Jt hRp -ut thv&h hRp.F!C trnh nD3 R& gi 1D t',t 1a30!t+@a0 g-
&C& giai 0en *a!B
2^p t &C& &hZ *G (bng &C& nct &hZ vD &C& &C&h ;Jt hRp thv&h
hRp.
Mr('ring &C& 0en t',t thv&h hRp.
[Cnh giC vD @Q trv &C& 0en t',t.
httpBOOtai1i'!ha3.&0-
9=
Lp trnh ha trn Java 2D v 3D
CC& thjng tin &h0 R& *G (bng T hiTn thU t',t &ng r]t &n thiJt &h0
viE& @iT! (ikn t',t nh &ar't p0*iti0ning+ hit ('t'&ti0n+ vD high1ighting.
[T phCt triTn &C& phn -"- &x thT triTn ;hai trIn t0Dn &!+t',t phWi R&
thT hiEn trIn nhi"! ngjn ngZ ;hC& nha! @ng nhi"! T &x thT thv&h hRp
vi !3 t^& &wa &C& hE thQng vVn @Wn thv&h hRp.
-.*.( CD chE.
)3phfnct &hZg 1D -ut &C&h hiTn thU tr`& !an &h0 -ut ha3 nhi"! ;v
t`.Knh (Cng+;v&h th&+vD vU trv &wa g13ph phb th!u& vD0 vVn &Wnh &wa
nx..]t nhi"! 10ei g13ph &x thT R& *G (bng T -iI! tW -ut ;v t` n
h0& nhiI! ;v t` ;Jt hRp vi nha!+phb th!u& vD0 60nt vD ;iT! (Cngf*t31'g.
Xv (b nh tr0ng 0en t',t viJt @ng ta3+&C& ;v t` & @iEt &x thT thT
hiEn &C& hnh (Cng &hZ ;hC& nha! phb th!u& vD0 &C&h nx ;Jt hRp vi &C&
;v t` 1i"n ;" vi nx.
Tr0ng -ut *Q hE thQng vVn @Wn+& @iEt 1D &hZ .p+ th' &0nt',t 06 a
g13ph -!*t a1?a3* @' ta;'n int0 a&&0!nt .ihjng giQng tiJng #nh+&C&
&!r*iv' 60r- &x tvnh @^t @!u& tr0ng &hZ .p.
Phb th!u& vD0 ttng &0nt',t+&C& &!r*iv' 60r- &x thT ;hC& nha! h0Dn
t0Dn v" hnh (Cng.Xv (b+&hZ h'h tr0ng tiJng .p &x @Qn &!r*iv' 60r-
httpBOOtai1i'!ha3.&0-
99
Lp trnh ha trn Java 2D v 3D
nh tr0ng hnh 7P2 (i s3B
/& (_ @Qn ;iT! 60r- nD3 &h ;hC& nha! ji &ht *0 vi &C 60r-
;hC&+nhng nhZng *` tha3 i v" hnh (Cng ;hjng phWi 1D *` ;hC& @iEt &
@Wn v" &!r*iv' tr0ng tiIng #nh.
Tr0ng -ut *Q ngZ &Wnh+hai g13ph &x thT tha3 i hnh (Cng -ut &C&h
& @Wn vD ;Jt hRp vD0 60r- -ut g13ph n.iiT! ;Jt hRp nD3 R& gi 1D
1igat!r'.Xv (b+h! hJt &C& 60nt tiJng anh &haa 1igat!r' nh tr0ng hnh 7P
5.XiE& hda hRp g13ph a vD0 tvnh t0Cn phn nhj ra tr0ng ;v t` 6 vD ;Jt
hRp &C& ;v t` th'0 -ut &C&h t` nhiIn+tha3 v &C& ;v t` ;" nha!
httpBOOtai1i'!ha3.&0-
100
Lp trnh ha trn Java 2D v 3D
CC& &hZ ghcp &ng R& *G (bng tr0ng tiJng rp vD &C&h *G (bng
&wa -ut *Q &hZ ghcp i* -an(at0r3Pnx ;hjng R& &h]p nhn T hiTn thU
&C& ;v t` ;Jt hRp &hvnh ,C& -D ;hjng *G (bng &hZ ghcp thv&h hRp.ihi &C&
&hZ ghcp R& te0 thDnh tt &C& ;v t` .p+hnh (Cng tha3 i -ut &C&h
& @Wn hn *0 vi tiJng #nh.Xv (b+nh tr0ng hnh 7P7 -iI! tW &C&h hai
&hZ &Ci rp ;Jt hRp vi nha! thDnh -ut &hZ ghcp ;hi &hng ,!]t hiEn
&_ng nha!.
-.*.% Frderin$ Text
Tr0ng ngjn ngZ 1p trnh Java+vVn @Wn R& - hxa @ng &C&h *G
(bng &C& ;v t` - hxa 4ni&0('.XVn @Wn *G (bng ;v t` - hxa 4ni&0('
R& 1! trZ tr0ng @u nh tr0ng 10gi&a1 0r('r. 10gi&a1 0r('r 1D ni -D
tr0ng x &C& ;v t` vD &C& tt R& & vD ghi. 10gi&a1 0r('r ;hjng nh]t
thiJt phWi giQng nh vi*!a1 0r('r+1D ni -D tr0ng x &C& g13ph tng ang
R& hiTn thU.
Xi*!a1 0r('r &h0 &C& g13ph tr0ng hE thQng ghi &b thTf*&riptg R& gi
1D *&ript 0r('r.Xv (b+ *&ript 0r('r &h0 vVn @Wn ;iT! .0-an R& @Q trv tt
trCi !a phWi vD *&ript 0r('r &h0 &C& vVn @Wn #ra@i& vD K'@r'? R& @Q
trv tt phWi *ang trCi.
/ut *Q hE thQng ghif?riting *3*t'-*g &x &C& ng!3In t^& tr0ng viE& thI-
&C& *&ript 0r('r &h0 viE& *^p ,Jp &C& g13ph vD &C& tt tr0ng nhi"! (dng &wa
vVn @Wn.Xv (b+ &C& *Q #ra@i& vD K'@r'? &he3 tt trCi !a phWi+-& ( &C&
httpBOOtai1i'!ha3.&0-
101
Lp trnh ha trn Java 2D v 3D
;v t` &he3 tt phWi !a trCi.f[i"! nD3 &x nghha #ra@i& vD K'@r'?+nga3 &W
;hi ;hjng &x &C& vVn @Wn @ng tiJng #nh nhng vD0+&hng vn th`& *` 1D
f;h th!tg hai &hi"!g
/ut hE thQng ghi vi*!a1 0r('r phWi ;hjng R& tha3 i nga3 &W ;hi
&C& ngjn ngZ hda trun vi nha!.[i"! nD3 R& -j tW tr0ng hnh 7P9+-iI!
tW -ut nhx- tt #ra@i& nhng vD0 -ut &s! vVn @Wn tiJng #nh.
Ch HBTr0ng vv (b nD3 vD tr0ng &C& vv (b *a!+ &C& vVn @Wn #ra@i& vD
K'@r'? R& hiTn thU @ng &C& &hZ &Ci in h0a vD &C& ;h0Wng &C&h giZa
&C& &hZ R& hiTn thU @ng (]! ge&h (i./\i phn -iI! tW &hia thDnh
hai phnBviE& hiTn thU &wa &C& ;v t` R& 1! trZ tr0ng @u nhf&C& ;v t`
tr0ng 10gi&a1 0r('rg *a! x 1D &C&h hiTn thU &wa nhZng ;v t` R& hiTn
thUf&C& ;v t` tr0ng vi*!a1 0r('rg.CC& *Q @In (i ;h!ng ;v t` &h Unh
in*'rti0n 066*'t*.
Knh 7P9 >i(ir'&ti0na1 T',t
Ch0 (_ &hng 1D -ut phn tr0ng -ut &s! tiJng #nh+&C& tt #ra@i&
R& hiTn thU tr0ng &C& #ra@i& *&ript+tt phWi !a trCi.
ihi -ut (dng vVn @Wn vi -ut *` pha trun hai &C&h @Q trv tt trCi !a
phWi vD tt phWi !a trCi R& hiTn thU+ @a*' (ir'&ti0n *Y R& &h
Unh.>a*' (ir'&ti0n 1D -ut *&ript 0r('r &wa hE thQng ghi.Xv (b+nJ! vVn
httpBOOtai1i'!ha3.&0-
102
Lp trnh ha trn Java 2D v 3D
@Wn gQ& 1D tiJng #nh vi -ut *Q &hZ #ra@i& R& nhng vD0+th @a*'
(ir'&ti0n *Y 1D tt trCi !a phWi.SgR& 1ei+nJ! vVn @Wn gQ& 1D tiJng #ra@i&
vi -ut *Q &hZ #nh nhng vD0 h0& &C& &0n *Q+th @a*' (ir'&ti0n *Y 1D tt
phWi !a trCi.
>a*' (ir'&ti0n ,C& Unh &C& @Q trv tr0ng -\i 0en &wa vVn @Wn vi -ut
&0--0n (ir'&ti0n R& hiTn thU.Tr0ng vv (b 9P7+ @a*' (ir'&ti0n 1D tt trCi
!a phWi.Cx @a hng @Q trv vVn @Wn tr0ng vv (b nD3+vVn @Wn tiJng #nh y
0en ! &wa &s! &he3 tt trCi !a phWi+vVn @Wn #ra@i& &he3 tt phWi !a
trCi+vD &C& vVn @Wn ;hC& &he3 tt trCi !a phWi.
-.*.* Go v Hnh vH vIn ,Jn
Trt ;hi @en 1D- viE& vi 60nt n &C&h+&C& ;v t` ;hC& nha! tr0ng ;iT!
60nt &x &hi"! rung ;hC& nha!.[i"! nD3 &x nghha t]t &W &C& vU trv vD ;v&h
th& &wa &C& vVn @Wn phWi R& tvnh t0Cn -ut &C&h &hvnh ,C& vi &C& ;v
t` R& *G (bng.Xv (b+ -ut &ut &C& &hZ *Q R& &Vn 1" phWi R& hiTn thU
tr0ng ;iI! 60nt &sn ,ang+@en ;hjng thT (k (Dng *G (bng &C& ;hjng gian
-y rung &h0 vU trv &wa &C& vVn @Wn.[ &Vn 1" &C& &ut -ut &C&h ng
^n+@en &n phWi @iJt &hvnh ,C& &hi"! rung &wa -\i *Q -D @en &x thT i"!
&hnh *a0 &h0 ph_ hRp.
CC& vVn @Wn thzng *G (bng &C&h hiTn thU th'0 nhi"! (dng vD nhi"!
;iT! (Cng+nh th'0 ;iT! nct - vD in nghiIng.Tr0ng trzng hRp nD3+&C&
;v t` giQng nha! &x thT &x &C& hnh (Cng ;hC& nha! v" &hi"! rung+phb
th!u& vD0 &C&h nx thT hiEn ;iT ! (Cng.[T &x vU trv +;v&h th& vD r'n('r
t',t &hvnh ,C&+@en &n phWi ;iT- tra -\i ;v t` riIng 1 vD ;iT! (Cng R&
*G (bng &h0 ;v t` x.Tht -a3 1D 1p TextLa'out 1D- i"! nD3 &h0
@en.
[T hiTn thU &C& vVn @Wn ng tr0ng nhi"! ngjn ng &hng hen nh
K'@r'? vD #ra@i&+-\i ;v t` &n phWi R& &sn nh^& vD t vD0 @In tr0ng
-ut ngZ &Wnh vi &C& ;v t` @In &enh.>yi v hnh (Cng vD vU trv &wa &C& ;v
httpBOOtai1i'!ha3.&0-
105
Lp trnh ha trn Java 2D v 3D
t` &x thT tha3 i R& phb th!u& vD0 ttng ngZ &Wnh+viE& &sn nh^& vD *^p
t &C& 0en vVn @Wn -D ;hjng &n ,ct Jn vVn &Wnh 1D -ut i"! ;hjng
R& tCn thDnh.
-.*.- 7K trL thao tMc vNi vIn ,Jn.
[T &h0 phcp ngzi (_ng &x thT *Ga i t',t R& hiTn thU+@en phWiB
KiTn thU (]! &ar't -D nx &h Un ni -ut ;v t` -i *Y R& thI-
vD0 ;hi ngzi (_ng thI- vD0 t',t.
Di &h!3Tn (]! &ar't vD iT- &hn tr0ng &s! trW 1zi ;hi ngzi (_ng
a vD0.
PhCt hiEn *` 1`a &hn &wa ngzi (_ngfhit ('t'&ti0ng.
LD- ni @t 0en t',t R& 1`a &hn.
7.(.7.1 8i9n th: ';u nh<c
Tr0ng &C& t',t &x thT &hnh *Ga R&+(]! &ar't R& *G (bng T hiTn
thU iT- &hn hiEn tei+vU trv tr0ng 0en t',t ni -D &C& ;v t` -i *Y R&
&hn vD0.Thjng thzng+-ut (]! &ar't R& thT hiEn 1D -ut thanh thng
ang nh]p nhC3 giZa hai g13ph.iv t` -i R& &hn vD0 vD R& hiTn thU
tei vU trv &wa (]! &ar't.
XiE& tvnh t0Cn vU trv (]! &ar't &x thT r]t pha& tep+& @iEt 1D tr0ng &C&
t',t hai &hi"!.CC& 0en &hn vD0 tr0ng &C& zng @iIn Unh hng &x hai
vU trv &x thT &hn @yi v hai g13ph x ph_ hRp vi ;h0Wng ;v t` ;hjng
R& hiTn thU *Ct nga3 &C& ;v t` ;hC&.[i"! nD3 R& -iI! tW tr0ng hnh 7P
:.Tr0ng hnh vY nD3+&C& (]! &ar't R& thT hiEn 1D &C& (]! ng0& v!jng.
httpBOOtai1i'!ha3.&0-
107
Lp trnh ha trn Java 2D v 3D
Knh 7P: D!a1 Car't*
iv t` y vU trv tha = n- *a! (]! vD n- tr& ;v t` #.SJ! ngzi
(_ng -!Qn thI- -ut ;v t` #ra@i& vD0 &h\ x+g13ph &wa nx R& hiTn thU
@In phWifphva tr&g &wa ;v t` #.Cdn nJ! ngzi (_ng -!Qn &hn -ut ;v
t` %ng1i*h+g13ph &wa nx R& hiTn thU @In trCifphva *a!g &wa (]! .
[T 1D- & i"! nD3 -ut *Q hE thQng hiTn thU hai (]! &ar't+-ut
(]! 1D &hvnh fpri-ar3g &dn -ut (]! 1D phb f*'&0n(ar3g.D]! &ar't &hvnh
&h Unh ni -D -ut ;v t` &hn vD0 R& hiTn thU ;hi hng &wa ;v t` x
&_ng vi hng & *y &wa &W 0en t',t.Cdn (]! &ar't phb &h0 @iJt -ut ;v
t` &hn vD0 *Y R& hiTn thU ;hi hng &wa ;v t` x ngR& vi hng &
*y &wa 0en t',t.Lp TextLa'Fut t` ung h\ trR &W hai (]! &ar't+&dn 1p
>textCo"ponent th ;hjng.
ihi 1D- viE& vi vVn @Wn hai &hi"!+@en ;hjng thT n giWn thI- vD0
@" rung &wa &C& g13ph tr& -ut ;h0Wng trQng &wa ;v t` T tvnh t0Cn vU trv
(]! &ar't.SJ! @en 1D- v3+(]! &ar't &x thT hiEn ra tei vU trv *ai nh @en
th]3 tr0ng hnh 7P<B
8ig!r' 7P< Car't Dra?n in&0rr'&t13
[T (]! &ar't &x thT hiTn thU y -ut vU trv hRp 1H+@" rung &wa &C& g13ph
y phva @In trCi &wa ;h0Wng trQng &n phWi R& thI- vD0 vD ngZ &Wnh
httpBOOtai1i'!ha3.&0-
109
Lp trnh ha trn Java 2D v 3D
hiEn tei a vD0 tvnh t0Cn.Trt ;hi ngZ &Wnh R& a vD0 tvnh t0Cn+&C&
phcp 0 g13ph *Y ;hjng &n thiJt ;hp vi viE& hiTn thU.
7.(.7.2 Di chu&9n ';u nh<c.
T]t &W &C& trnh @iIn *0en vVn @Wn "! &h0 phcp ngzi *G (bng (i
&h!3Tn (]! &ar't vi &C& phv- -i tIn.Sgzi *G (bng -0ng -!Qn (]!
&ar't *Y (i &h!3Tn th'0 hng &wa &C& phv- -i tIn & ]n.Tt trCi !a
phWi &wa 0en t',t+viE& (i &h!3Tn &C& ;h0Wng trQng thI- vD0 r]t n
giWnBPhv- -i tIn phWi 1D- tVng ;h0Wng trQng R& thI- vD0 @ng &dn
phv- -i tIn trCi 1D- giW- i.Tr0ng &C& vVn @Wn hai &hi"! h0& &C& vVn
@Wn &x nhi"! &hZ ghcp+&C&h 1D- nD3 &x thT ;hiJn (]! &ar't nh3 !a &C&
g13ph th'0 hng &wa zng @iIn vD (i &h!3Tn tr0ng th'0 hng ngR&
1ei.
[T (i &h!3Tn (]! &ar't -ut &C&h -Rt -Df*-00th13g !a vVn @Wn hai
&hi"!+@en &n phWi tvnh t0Cn hng &wa vVn @Wn thi hDnh..>en ;0 thT n
giWn tVng ;h0Wng trQng thI- vD0 ;hi phv- -i tIn phWi R& ]n vD giW-
nx ;hv phv- -i tIn trCi R& ]n.SJ! ;h0Wng trQng thI- vD0 hiEn tei
n- @In tr0ng -ut thi hDnh &wa &C& ;v t` tt phWi !a trCi+th phv- -i
tIn phWi &x thT 1D- giW- ;h0Wng trQng thI- vD0 vD phv- -i tIn trCi *Y
1D- tVng nx.
Di &h!3Tn (]! &ar't ngang !a hng zng @iIn 1D -ut viE& ;hC
pha& tep nh tr0ng hnh 7P= (i s3B
httpBOOtai1i'!ha3.&0-
10:
Lp trnh ha trn Java 2D v 3D
8ig!r' 7P= Car't /0v'-'nt
Ch^& &h^n &C& g13ph *Y ;hjng @a0 giz &x (]! &ar't giZa &hng.tha3
vD0 x (]! &ar't (i &h!3Tn !a &C& hiTn thU &wa g13ph -ut ;v t` n.Xv
(b+;hjng @a0 giz &x -ut (]! &ar't @In tr0ng &hZ 0 vD -ut *` @iJn s-fan
!-1a!tg nJ! &hng R& hiTn thU @ng hai ;v t` phsn &C&h.Lp
TextLa'Fut &!ng &]p &C& phng tha& get4ext(ight:it an(
get4extLeft:it T &x thT (k (Dng (i &h!3Tn (]! &ar't -ut &C&h -Rt -D
!a &C& vVn @Wn hai &hi"!.
7.(.7.( 8it "esting
Thjng thzng+-ut vU trv tr0ng ;hjng gian &wa &jng &b phWi R&
&h!3Tn thDnh ;hjng gian trQng &wa t',t.Xv (b nh+;hi ngzi *G (bng
nh]n &h!ut vD0 vVn @Wn R& &hn+vU trv &wa &h!ut R& &h!3Tn thDnh
;h0Wng trQng vD R& *G (bng nh iT- &!Qi &wa v_ng 1`a &hn.Th'0
-ut &C&h 10gi&+nx R& &h!3Tn ngR& thDnh vU trv &wa (]! &ar't.
ihi @en 1D- viE& vi vVn @Wn hai &hi"!+-ut vU trv tr`& !an tr0ng
phn hiTn thU &x thT Cp ang &h0 hai 066*'t ;hC& nha! tr0ng 0en vVn @Wn
gQ&+nh tr0ng hnh 7P9 (i s3B
Knh 7P9 Kit T'*ting >i(ir'&ti0na1 T',t
>yi v -ut vU trv tr`& !an &x thT Cp ang &h0 hai 066*'t ;hC& nha!+
hit t'*ting &C& vVn @Wn hai &hi"! ;hjng phWi 1D !an trng &wa &C& phcp 0
@" rung &wa &C& zng nct f-'a*!ring g13ph ?i(th*g trt g13ph tei &C& vU
httpBOOtai1i'!ha3.&0-
10<
Lp trnh ha trn Java 2D v 3D
trv &hvnh ,C& R& t- th]3 vD *a! x Cnh ,e vU trv x Jn -ut &hara&t'r
066*'t.
>en &x thT th`& hiIn hit t'*ting @ng viE& *G (bng 1p
TextLa'out.hitTestChar. Thjng tin v" hit R& xng gxi tr0ng Qi
Text7itinfo @a0 g- &C& thjng tin v" &enh -D viE& hit R& th]3 trIn x.
7.(.7.7 =nh ';u v>ng l?a ch@n.
/ut v_ng &C& ;v t` R& 1`& &hn R& hiTn thU ha @ng -ut
v_ng R& tj *Cng+x 1D v_ng -D -\i zng nct R& hiTn thU vi -D!
trCi ngR& vi -D! n"n.
X_ng R& tj *Cng+giQng nh (]! &ar't+&x nhi"! pha& tep tr0ng &C& vVn
@Wn hai &hi"! hn 1D tr0ng &C& vVn @Wn -ut &hi"!f-0n0(ir'&ti0na1
t',tg.Tr0ng vVn @Wn hai &hi"!+-ut (Wi 1iIn tb& &C& ;v t` &x thT ;hjng &x
-ut v_ng R& tj *Cng 1iIn tb& ;hi hiTn thU.SgR& 1ei+-ut v_ng *Cng 1iIn
tb& &h0 th]3 -ut &C&h tr`& !an -ut (Wi 1iIn tb& &C& nct &x thT ;hjng ph_
hRp vi -ut ;v t` n+(Wi 1iIn tiJp &wa &C& ;v t`.
Cx hai &C&h T 1`a &hn v_ng *Cng tr0ng vVn @Wn hai &hi"!B
A 6ogical highlightingBv>ng sng logicC P Xi v_ng *Cng 10gi&+&C&
;v t` R& 1`a &hn thzng 1iIn tiJp nha! tr0ng -0 hnh vVn @Wnft',t
-0('1g+vD v_ng *Cng R& 1`a &hn -ut &C&h 1iIn tiJp.r'- vv (b v"
10gi&a1 high1ighting+,'- hnh 7P10.
A Disual highlightingBv>ng sng tr?c EuanC F vi vi*!a1
high1ighting+@en &x thT &x nhi"! (Wi &C& ;v t` R& 1`a &hn+nhng v_ng
*Cng thjng thzng 1iIn tiJp nha!.Xv (b v" vi*!a1 high1ighting+,'- hnh 7P
11.
httpBOOtai1i'!ha3.&0-
10=
Lp trnh ha trn Java 2D v 3D
Knh 7P10 L0gi&a1 Kigh1ighting f&0ntig!0!* &hara&t'r*g
Knh 7P11 Xi*!a1 Kigh1ighting f&0ntig!0!* high1ight r'gi0ng
L0gi&a1 high1ighting n giWn hn tr0ng viE& th`& thi+&C& ;v t` R& 1`a
&hn thzng 1iIn tiJp nha!.
-.*.2 ThOc thi viPc hiQn thH vIn ,Jn tron$ Rn$ dSn$ >avaT .
Phb th!u& vD0 JavaA #P$* -D @en *G (bng+@en &x thT &x vt h0&
nhi"! &C& i"! ;hiTn v" t',t 1a30!t fhiTn thU vVn @Wng nh @en &nB
1. SJ! @en -!Qn hiTn thU &W -ut ;hQi t',t h0& &n &C& i"! ;hiTn
&hnh *Ga t',t+@en &x thT *G (bng >textCo"ponent+nx *Y th`& hiEn
t',t 1a30!t &h0 @en. >textCo"ponent R& thiJt ;J T i"! ;hiTn
viE& &n thiJt &wa h! hJt &C& ang (bng vD h\ trR &h0 &C& vVn @Wn
hai &hi"!.[T thI- thjng tin v" >textCo"ponent @en ,'- thI-
phn 4*ing th' J8CO2?ing Pa&;ag'* &wa @u Java T!t0ria1.
2. SJ! @en -!Qn hiTn thU -ut 0en &h!\i ;v t` n giWn+@en &x thT
gi Qi tRng Graphics%&.dra"tring vD 3I! &! Java 2D hiTn thU
&h!\i ;v t` &h0 @en.>en &ng &x thT *G (bng dra"tring T
httpBOOtai1i'!ha3.&0-
109
Lp trnh ha trn Java 2D v 3D
r'n('rftrW v"g ;iT! &wa ,s! ;v t` vD &C& ,s! ;v t` x &haa ;iT! vVn
@Wn hai &hi"!.[T &x thI- thjng tin v" r'n('ring t',t !a 1p
Graphics%&+@en ,'- thI- phn .'n('ring )raphi&* Pri-itiv'*.
5. SJ! @en -!Qn th`& thi viE& &hnh *Ga vVn @Wn &wa @en+@en &x thT
*G (bng T',tLa30!t T i"! ;hiTn viE& hiTn thU vVn @Wnft',t
1a30!tg+tj *Cngf high1ightingg+vD hit ('t'&ti0n.CC& tiEn 1Ri R&
&!ng &]p @yi 1p TextLa'out &h0 h! hJt &C& trzng hRp ph
@iJn+@a0 g- &C& ,s! vVn @Wn vi viE& pha trun &C& ;iT! 80nt+pha
trun &C& ;iT! ngjn ngZ+vD vVn @Wn hai &hi"!.[T &x thI- thjng tin
v" &C&h *G (bng TextLa'out+@en ,'- thI- phn /anaging T',t
La30!t.
7. SJ! @en -!Qn i"! ;hiTn t0Dn @u viE& 1D- thJ nD0 T t',t R&
*hap' vD R& Unh vU trv+@en &x thT ,s3 (`ng 1p G'phvector &wa
@en @ng &C&h *G (bng 80nt vD *a! x r'n('r &hng (`a trIn 1p
Graphics%&.[T &x thI- thjng tin v" &C&h th`& thi &jng &b t',t
1a3p!t &wa @en+@en ,'- thI- phn i-p1'-'nting a C!*t0- T',t
La30!t /'&hani*- .
Thjng thzng+@en ;hjng &n phWi th`& hiEn t',t 1a30!t.Ch0 h! hJt
&C& ang (bng+Jt',tC0-p0n'nt 1D giWi phCp tQt nh]t &h0 viE& hiTn thU &C&
vVn @Wn thnh vD vVn @Wn &x thT &hnh *Ga.T!3 nhiIn+ Jt',tC0-p0n'nt
;hjng h\ trR viE& hiTn thU (]! &ar't ;cp h0& &C& 0en 1`a &hn 1iIn tiJp
tr0ng vVn @Wn hai &hi"!.SJ! ang (bng &wa @en 3I! &! nhZng & tvnh
trIn+h0& @en thv&h th`& hiEn viE& &hnh *Ga vVn @Wn &wa @en+@en &x thT
*G (bng Java 2D t',t 1a30!t #P$*.
E9Fn &G vi4c hiHn thI vJn +Fn.
Lp TextLa'out h\ trR &C& t',t -D nx &haa `ng nhi"! ;iT!
(Cngf*t31'g vD nhi"! ;v t` tt &C& hE thQng ?riting ;hC& nha!+@a0 g-
httpBOOtai1i'!ha3.&0-
110
Lp trnh ha trn Java 2D v 3D
#ra@i& vD K'@r'?f#ra@i& vD K'@r'? 1D &C& ;iT! & @iEt ;hx T hiTn thU
@yi v @en phWi r'*hap' vD r'0r('r vVn @Wn T R& &h]p nhn hiTn thUg.
Lp TextLa'out 1D- n giWn viE& *G 1H &C&h hiTn thU -D &C& phcp
0 vVn @Wn nJ! @en 1D- viE& vi &C& vVn @Wn &h &x tiJng #nh.>ng viE&
*G (bng T',tLa30!t @en &x thT et R& viE& te0 &hZ vi &h]t 1Rng &a0
-D ;hjng tQn nhi"! &jng *a&.
"ext 6a&out -er!or#ance
Lp T',tLa30!t gip @en tr0ng viE& ,C& Unh vU trv vD tha t` &wa &C&
zng nct.>en &x thT (_ng T',tLa30!t TB
KiTn thU &C& vVn @Wn -ut hng vD vVn @Wn hai hng.
KiTn thU vD (i &h!3Tn (]! &ar't.
Th`& hiEn hit t'*ting trIn vVn @Wn.
Tj *Cng v_ng vVn @Wn R& 1`a &hn.
zng hRp+@en &x thT tvnh t0Cn &C&h @Q trv vVn @Wn &wa @en @ng &C&h
i"! ;hiTn -ut &C&h &hvnh ,C& &C& zng nct -D @en *G (bng vD ni
&hng *Y R& tfvD0 vVn @Wng.XiE& *G (bng &C& thjng tin nh &C& ;v&h
& zng nctfg13ph *i'*g+&C& @Wng &0 ;c0f;'rning ta@1'*g+vD &C&h ghcp
&hZf1igat!r' in60r-ati0ng+@en &x thT ,s3 (`ng giWi th!t &wa @en T tvnh
t0Cn &C&h @Q trv vVn @Wn+@3pa**ing &jng &b @Q trv &wa hE thQngf@3pa**ing
th' *3*P t'-* 1a30!t -'&hani*-g.[T &x thI- thjng tin @en ,'- thI-
phn i-p1'-'nting a C!*t0- T',t La30!t /'&hani*-.
-.-.( TrUnh ,' vIn ,Jn.
Lp TextLa'out *Y t vVn @Wn -ut &C&h t` ung+;T &W &C& vVn @Wn
-ut hngf>iDiP@i(ir'&ti0na1g+vi viE& te0 hnh (Cngf*hapingg vD
0r('ring &hvnh ,C&.[T *hap' vD 0r('r -ut &C&h &hvnh ,C&+&C& zng nct
phWi -iI! tW &C& zngf1in'g &wa vVn @Wn+ TextLa'out phWi @iJt t0Dn @u
ngZ &Wnh &wa vVn @WnB
httpBOOtai1i'!ha3.&0-
111
Lp trnh ha trn Java 2D v 3D
SJ! vVn @Wn n- trIn -ut zng nf*ing1' 1in'g +&hng hen nh
-ut tt n &wa nhnf1a@'1g &h0 -ut nt 1Enh h0& -ut zng tr0ng hup
th0eif(ia10g @0,g+@en &x thT ,s3 (`ng -ut Qi tRng TextLa'out tr`&
tiJp tt vVn @Wn.
SJ! @en &x nhi"! vVn @Wn hn 1D &h &x -ut (dng h0& @en -!Qn
&hia vVn @Wn tt &C& *ing1' 1in' thDnh &C& 0en+@en ;hjng thT ,s3 (`ng
Qi tRng TextLa'out -ut &C&h tr`& tiJp.>en phWi *G (bng Qi tRng
LineBreak/easure T Cp ang w &C& ngZ &Wnh.
Kng & @Wn &wa -ut vVn @Wn thzng R& thiJt 1p @ng &C& th!u&
tvnhf;iT! (Cngg trIn vVn @Wn.SJ! th!u& tvnh x @U thiJ!+1p TextLa'out
*G (bng giWi th!t &wa @Wng - hai &hi"! 4ni&0('+vD nhn R& hng
& @Wn tt &C& ;v t` @^t ! tr0ng 0en.
7iQn thH dVu nhWc kXp.
Lp TextLa'out &haa &C& thjng tin v" (]! &ar't nh hnh (Cng &wa
(]!f&ar't *hap'g+vU trv vD gx&fang1'g.>en &x thT *G (bng &C& thjng tin nD3
T (k (Dng hiTn thU (]! &ar't tr0ng &W vVn @Wn -ut hng vD hai
hng.ihi @en vY (]! &ar't &h0 vVn @Wn -ut &hi"!+viE& *G (bng 1p
TextLa'out *Y W- @W0 (]! &ar't R& t vU trv -ut &C&h &hvnh ,C&.
TextLa'out &!ng &]p &h0 ta nhi"! hnh (Cng -& Unh &wa (]! &ar't
vD h\ trR -ut &C&h t` ung (]! &ar't ;cp+nh @en th]3 tr0ng hnh 7P
12.CC& vv trv &wa (]! &ar't x &ng R& *G (bng nh zng @iIn giZa
&C& zng nct &h0 viE& tj *Cng vD hit t'*ting.
Knh 7P12 #ng1'( Car't*
httpBOOtai1i'!ha3.&0-
112
Lp trnh ha trn Java 2D v 3D
CVn &a vD0 ;h0Wng trQng R& thI- vD0+phng tha&
get)aret"hapes trW v" -ut -Wng hai phn tG &wa *hap'Bphn tG tha nh]t
&haa (]! &ar't &hvnh vD phn tG tha hai &haa (]! &ar't phb+nJ! &hng
&_ng tn tei.[T hiTn thU &W hai (]! &ar'tf(]! &ar't ;cpg+@en n giWn &h
1D vY &W hai *hap' &wa (]! &ar't&C& (]! &ar't *Y R& r'n('r -ut &C&h t`
ung tei nhZng vU trv &hvnh ,C&.
SJ! @en -!Qn *G (bng *hap' &wa (]! &ar't -ut &C&h t_3 thv&h+@en &x
thT t- Jn vU trv vD gx& &wa &C& (]! &ar't @ng Qi tRng TextLa'out vD
vY &hng th'0 &C&h &wa @en.
Tr0ng vv (b (i s3+hnh (Cng &wa (]! &ar't &hvnh vD phb -& Unh
R& vY trIn &C& -D! ;hC& nha!.[s3 1D &C&h ph @iJn T te0 *` ;hC& @iEt
&wa hai (]! &ar't .
0hapeKL caret0hapes =
*a,out.getCaret0hapes(hit&'
g(.setCo*or($iM/$Y"C/$!T"C-N-$&'
g(.draw(caret0hapesK+L&'
if (caret0hapesKOL P= nu**&Q
g(.setCo*or(0!C-#)/$Y"C/$!T"C-N-$&'
g(.draw(caret0hapesKOL&'
2
-.-.* &i chu'Qn dVu nhWc.
>en &ng &x thT *G (bng 1p TextLa'out T ,C& Unh ;Jt !W &wa
viE& thI- vD0 &C& ;h0Wng trQng ;hi ngzi *G (bng ]n &C& phv- -i tIn
trCi h0& phWi.D`a vD0 Qi tRng Text7itinfo+nx &h0 ta @iJt vU trv hiEn tei
&wa ;h0Wng trQng thI- vD0+phng tha& get4ext(ight:it trW v" ;iT! Qi
tRng Text7itinfo -D nx &h0 @iJt &hvnh ,C& vU trv &wa ;h0Wng trQng thI-
httpBOOtai1i'!ha3.&0-
115
Lp trnh ha trn Java 2D v 3D
vD0 ;hi phv- -i tIn phWi R& nh]n.Cdn phng tha& get4extLeft:it
&h0 ta thjng tin nh v3 ;hi phv- -i tIn trCi R& nh]n.
Tr0ng vv (b (i s3+vU trv hiEn tei &wa ;h0Wng trQng &hn vD0 R&
(i &h!3Tn Jn ni tng ang ;hi -D phv- phWi R& ]n.
Text1itinfo newinsertion-ffset =
*a,out.get#ext$ight1it(insertion-ffset&'
if (newinsertion-ffset P= nu**&
Q
0hapeKL caret0hapes =
*a,out.getCaret0hapes(newinsertion-ffset&'
// draw carets
...
insertion-ffset = newinsertion-ffset'
2
-.-.- 7it Testin$
Lp TextLa'out &h0 ta -ut &jng &b n giWn T hit t'*ting vVn
@Wn.Phng tha& hitT'*tChar *Y 1]3 ta u , vD 3 tt &h!utfta;'* , an( 3
&00r(inat'* 6r0- th' -0!*'g nh &C& Qi *Q vD trW v" ;iT! Qi tRng
Text7itinfo.[Qi tRng Text7itinfo &haa ;h0Wng trQng &hn vD0 &h0 vU
trv vD &enh -D viE& hit ?a* 0n.
Tr0ng vv (b (i s3+phng tha& hit,est)har R& gi tr0ng Qi tRng
TextLa'out vD *a! x phng tha& getinsertindex R& *G (bng T 1]3
1ei ;h0Wng &haa trQng.
Text1itinfo hit = *a,out.hitTestChar(x, ,&'
int insertindex = hit.getinsertindex(&'
httpBOOtai1i'!ha3.&0-
117
Lp trnh ha trn Java 2D v 3D
-.-.2 GMnh dVu vYn$ Oa chZn.
>en &x thT nhn -ut Qi tRng Shape -D nx hiTn thU v_ng *Cng tt Qi
tRng TextLa'out. [Qi tRng TextLa'out *Y t` ung giZ ngZ &Wnh tr0ng
-ut -Wng ;hi tvnh t0Cn *Q &hi"! &wa v_ng R& tj *Cng.Lp TextLa'out
h\ trR &W v_ng *Cng 10gi& vD v_ng *Cng tr`& !an.
Tr0ng vv (b (i s3+v_ng *Cng R& i"n vi -D! *Cng vD *a! x
Qi tRng TextLa'out *Y vY t0Dn @u v_ng R& i"n x.[s3 1D -ut &C&h
n giWn T hiTn thU 0en vVn @Wn R& tj *Cng.
Shape highlightRegion =
layout.getLogicalHighlightShape(hit1,
hit2);
graphics.setColor(HiGHLiGHT_COLOR);
graphics.fill(highlightRegion);
graphics.drawString(layout, 0, 0);
-.-.3 6uer'in$ La'out /etrics
Lp TextLa'out &!ng &]p &C&h tr!3 &p Jn &C& phcp 0 ha &h0
t0Dn @u (Wi vVn @Wn hiTn thU.CC& phcp 0 &x *n tr0ng 1p TextLa'out
@a0 g- ascent+'escent+lea'ingf;h0Wng &C&h giZa &C& (dng &hZ *0 vi
(dng & *yg+ a(van&'+ vi*i@1' a(van&' vD @0!n(ing r'&tang1' fgii hen
&wa ;h!ng hnh &hZ nhtg.
Cx nhi"! hn -ut Qi tRng +ont &x thT R& 1iIn ;Jt vi -ut Qi
tRng TextLa'outB*` ;hC& nha! v" ;iT! (Cng ;hi th`& thi &x thT *G (bng
&C& ;i"! 60nt ;hC& nha!.CC& giC trU ascent vD 'escent &wa t0Dn @u ;iT!
60nt R& *G (bng tr0ng Qi tRng TextLa'out.XiE& tvnh t0Cn giC trU
1'a(ing &wa Qi tRng T',tLa30!t th pha& tep hn nhi"!+nx ;hjng &x giC
trU 1'a(ing &`& ei.
httpBOOtai1i'!ha3.&0-
119
Lp trnh ha trn Java 2D v 3D
)iC trU a(van&' &wa Qi tRng TextLa'out &hvnh 1D &hi"! (Di &wa
nxBx 1D ;h0Wng &C&h tt &enh @In trCi &wa nct @In trCi nh]t Jn &enh @In
phWi &wa nct @In phWi nh]t.)iC trU a(van&' thzng R& &h Unh 1D t0ta1
a(van&'.Cdn giC trU vi*i@1' a(van&' 1D &hi"! (Di &wa Qi tRng
TextLa'out -D ;hjng &x &C& ;h0Wng tr^ng.
ih!ng gii hen &wa -ut Qi tRng TextLa'out @a0 !anh t0Dn @u
vVn @Wn tr0ng phn @Q trv..Sx @a0 g- t0Dn @u &C& zn nct tr`&
!anfth]3 R&g vD &C& (]! &ar't @iIn.f/ut *Q tr0ng x &x thT R& 1]3 tt
gQ& h0& gQ& a(van&'g.ih!ng gii hen &x !an hE vi ng!n gQ& &wa
Qi tRng TextLa'out+;hjng 1iIn !an Jn vU trv trIn -Dn hnh.
Tr0ng vv (b (i s3+vVn @Wn tr0ng -ut Qi tRng TextLa'out R&
vY @In tr0ng -ut ;h!ng gii hen.
graphics.drawString(layout, 0, 0);
Rectangle2D bounds = layout.getBounds();
graphics.drawRect(bounds.getX()-1,
bounds.getY()-1,
bounds.getWidth()+2, bounds.getHeight()+2);
-.-.? CD vIn ,Jn tr[n nhi\u d]n$.
Lp TextLa'out &dn &x thT R& *G (bng T hiTn thU 0en t',t -D
nx &x nhi"! (dng.Xv (b nh+@en &x thT 1]3 -ut 0en &wa vVn @Wn+&hng
&C& 1in' &wa vVn @Wn x -ut @" rung nD0 x+vD hiTn thU &C& 0en nh
nhi"! (dng &wa vVn @Wn.
[T 1D- R& i"! nD3+@en ;hjng phWi 1D- tr`& tiJp @ng viE& te0 ra
nhi"! Qi tRng TextLa'out -D @en hiTn thU -\i (dng &wa vVn @WnP
phng tha& Lin'>r'a;/'a*!r' *Y 1D- i"! x &h0 @en.CC& ;iT! vVn @Wn
hai &hi"! ;hjng thT th`& hiEn i"! nD3 -ut &C&h &hvnh ,C& trt ;hi t]t &W
httpBOOtai1i'!ha3.&0-
11:
Lp trnh ha trn Java 2D v 3D
vVn @Wn tr0ng -ut 0en &x *n.Phng tha& Line2rea-*easure xng
gxi t0Dn @u thjng tin v" ngZ &Wnh T te0 ra &C& Qi tRng TextLa'out
&hvnh ,C&.
ihi vVn @Wn R& hiTn thU !a nhi"! (dng+&hi"! (Di &wa nhZng (dng
x thzng R& ,C& Unh @ng &hi"! rung &wa v_ng hiTn thU.2` &hia
(dngfLin' @r'a;ing ha3 1in' ?rappingg 1D viE& ,C& Unh ni -D nhZng
(dng @^t ! vD ;Jt th&.
/*
* FontSelection.java
* 1.0
* 12/03/06
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.event.itemEvent;
import java.awt.event.itemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;
import javax.swing.JApplet;
httpBOOtai1i'!ha3.&0-
11<
Lp trnh ha trn Java 2D v 3D
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/*
* Applet nay hien thi mot xau voi lua chon cua
nguoi su dung.
*/
public class FontSelection extends JApplet
implements itemListener {
/**
*
*/
private static final long serialVersionUiD =
5469031020823166920L;
JLabel fontLabel, sizeLabel, styleLabel;
FontPanel fontC;
JComboBox fonts, sizes, styles;
int index = 0;
String fontchoice = "L a ch n Font"; R S
int stChoice = 0;
httpBOOtai1i'!ha3.&0-
11=
Lp trnh ha trn Java 2D v 3D
String siChoice = "10";
@SuppressWarnings("unchecked")
public void init() {
getContentPane().setLayout(new
BorderLayout());
JPanel topPanel = new JPanel();
JPanel fontPanel = new JPanel();
JPanel sizePanel = new JPanel();
JPanel stylePanel = new JPanel();
JPanel sizeAndStylePanel = new JPanel();
topPanel.setLayout(new BorderLayout());
fontPanel.setLayout(new GridLayout(2,
1));
sizePanel.setLayout(new GridLayout(2,
1));
stylePanel.setLayout(new GridLayout(2,
1));
sizeAndStylePanel.setLayout(new
BorderLayout());
topPanel.add(BorderLayout.WEST,
fontPanel);
sizeAndStylePanel.add(BorderLayout.WEST,
sizePanel);
httpBOOtai1i'!ha3.&0-
119
Lp trnh ha trn Java 2D v 3D
sizeAndStylePanel.add(BorderLayout.CENTER,
stylePanel);
topPanel.add(BorderLayout.CENTER,
sizeAndStylePanel);
getContentPane().add(BorderLayout.NORTH,
topPanel);
fontLabel = new JLabel();
fontLabel.setText("Fonts");
Font newFont = getFont().deriveFont(1);
fontLabel.setFont(newFont);
fontLabel.setHorizontalAlignment(JLabel.CENTER);
fontPanel.add(fontLabel);
sizeLabel = new JLabel();
sizeLabel.setText("Kch C "); T
sizeLabel.setFont(newFont);
sizeLabel.setHorizontalAlignment(JLabel.CENTER);
sizePanel.add(sizeLabel);
styleLabel = new JLabel();
styleLabel.setText("Ki u ch "); 7 ;
styleLabel.setFont(newFont);
styleLabel.setHorizontalAlignment(JLabel.CENTER);
httpBOOtai1i'!ha3.&0-
120
Lp trnh ha trn Java 2D v 3D
stylePanel.add(styleLabel);
GraphicsEnvironment gEnv =
GraphicsEnvironment
.getLocalGraphicsEnvironment();
String envfonts[] =
gEnv.getAvailableFontFamilyNames();
Vector vector = new Vector();
for (int i = 1; i < envfonts.length; i++)
{
vector.addElement(envfonts[i]);
}
fonts = new JComboBox(vector);
fonts.setMaximumRowCount(9);
fonts.additemListener(this);
fontchoice = envfonts[0];
fontPanel.add(fonts);
sizes = new JComboBox(new Object[]
{ "10", "12", "14", "16", "18" });
sizes.setMaximumRowCount(9);
sizes.additemListener(this);
sizePanel.add(sizes);
styles = new JComboBox(new Object[]
{ "PLAiN", "BOLD", "iTALiC",
"BOLD & iTALiC" });
styles.setMaximumRowCount(9);
styles.additemListener(this);
sizes.setMaximumRowCount(9);
httpBOOtai1i'!ha3.&0-
121
Lp trnh ha trn Java 2D v 3D
stylePanel.add(styles);
fontC = new FontPanel();
fontC.setBackground(Color.white);
getContentPane().add(BorderLayout.CENTER,
fontC);
}
public void itemStateChanged(itemEvent e) {
if (e.getStateChange() !=
itemEvent.SELECTED) {
return;
}
Object list = e.getSource();
if (list == fonts) {
fontchoice = (String)
fonts.getSelecteditem();
} else if (list == styles) {
index = styles.getSelectedindex();
stChoice = index;
} else {
siChoice = (String)
sizes.getSelecteditem();
}
fontC.changeFont(fontchoice, stChoice,
siChoice);
}
httpBOOtai1i'!ha3.&0-
122
Lp trnh ha trn Java 2D v 3D
public static void main(String s[]) {
JFrame f = new JFrame("Ch n ki u Font"); S 7
f.addWindowListener(new WindowAdapter() {
public void
windowClosing(WindowEvent e) {
System.exit(0);
}
});
JApplet fontSelection = new
FontSelection();
f.getContentPane().add(fontSelection,
BorderLayout.CENTER);
fontSelection.init();
f.setSize(new Dimension(550, 250));
f.setVisible(true);
}
}
class FontPanel extends JPanel {
/**
*
*/
private static final long serialVersionUiD =
7850814263388447528L;
Font thisFont;
public FontPanel() {
httpBOOtai1i'!ha3.&0-
125
Lp trnh ha trn Java 2D v 3D
thisFont = new Font("Arial", Font.PLAiN,
10);
}
public void changeFont(String f, int st,
String si) {
integer newSize = new integer(si);
int size = newSize.intValue();
thisFont = new Font(f, st, size);
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
int w = getWidth();
int h = getHeight();
g2.setColor(Color.darkGray);
g2.setFont(thisFont);
String change = "Ch n Font ,c ch v S T ;
ki u ch ."; 7 ;
FontMetrics metrics =
g2.getFontMetrics();
int width = metrics.stringWidth(change);
int height = metrics.getHeight();
g2.drawString(change, w / 2 - width / 2,
h / 2 - height / 2);
}
}
httpBOOtai1i'!ha3.&0-
127
Lp trnh ha trn Java 2D v 3D
iJt !W &wa &hng trnhB
httpBOOtai1i'!ha3.&0-
129
Lp trnh ha trn Java 2D v 3D
Chng 3
T4. 2nh
Java 2DA #P$ h\ trR 5 -0('1 vY Wnh.
/0('1 ;hC&h &hw fpr0(!&'rO&0n*!-'rg h\ trR tr0ng phiIn @Wn
tr& &wan @Wn JDi.
/0('1 tr!ng gian fi--'(iat' -0(' -0('1g R& gii thiE! tr
0ng JavaA 2 2Di r'1'a*'.
/0('1 zng Qng tng thv&h vi -0('1 tr!ng gian vD *', R&
&Di t 3 w tr0ng @Wn Java #(van&'( i-aging #P$ *^p ti.
Tr0ng &hng nD3 &hng ta tp tr!ng vD0 &C& Qi tRng vD &C& &jng
nghE &wa -0('1 te0 Wnh -0(' tr!ng gianfi--'(iat' -0('g. CC& 1p -0('
tr!ng gian vD &C& gia0 (iEn &wan Java 2D #P$ &!ang &]p &C& &jng nghE
&h0 viE& ,G 1H Cnh ,e &C& iT- vi (Z 1iE &wa nx tr0ng @u nh. KD- #P$
nD3 h\ trR &h0 viE& tr!3 nhp (Z 1iE! Wnh tng &C& Unh (eng 1! trZ ;hC&
nha! vD tha0 tC& vi (Z 1iE! Wnh !a vDi10ei phcp t0Cn 1&.
=.1 *2c "ia% di4n v3 c2c &p
CC& #P$ te0 Wnh -0(' tr!ng gian tr0ng Java 2DA #P$ &x thT
R& nhx- 1ei tr0ng :
Cata10g' *a!B CC& gia0 (iEn+ &C& 1p (Z 1iE! Wnh+ &C& 1p tha0 t0Cn tG Wnh+
&C& 1p -0('1 -!+ &C& 1p -0('1 -D!+ &C& ng0ei 1E f',&'pti0n*g.
httpBOOtai1i'!ha3.&0-
12:
Lp trnh ha trn Java 2D v 3D
2.(.( CMc $iao diPn i"a$in$ <i"a$in$ interfaces=
$nt'r6a&' D'*&ripti0n
>!66'r'($-ag'Mp /j tW &C& tha0 tC& vD0 n ra n th`& hiEn
trIn Qi tRng >!66'r'(i-ag'. [R& &Di t
@yi #66in'Tran*60r-Mp+ C010rC0nv'rtMp+
C0nv01v'Mp+ L00;!pMp vD .'*&a1'Mp.
.a*t'rMp [Unh nghha &C& tha0 tC& vD0 ra n th`& hiEn
trIn &C& ji tRng .a*t'r [R& &Di t @yi
#66in'Tran*60r-Mp+ >an(C0-@in'Mp+
C010rC0nv'rtMp+ C0nv01v'Mp+ L00;!pMp vD
.'*&a1'Mp.
.'n('r'($-ag' [Unh nghha gia0 tha& &h0 &C& Qi tRng &haa
h0& &x thT *Wn *inh (Z 1iE! Wnh tr0ng ;iT!
.a*t'r*
Lrita@1'.'n('r'($-ag
'
/y rung .'n('r'(i-ag'
[Unh nghha &a& gia0 tha& &h0 &C& xi tRng
&haa h0& *Wn *inh (Z 1iE! Wnh tr0ng ;iI!
.a*t'r &x thT R& tha3 i.
Ti1'M@*'rv'r [Unh nghha &C& Qi tRng -!Qn R& @C0 ;hi
trang thCi &hnh *wa &wa -ut
Lrita@1'.'n('r'(i-ag' tha3 i.
.
2.(.% CMc Np dE iPu Jnh<i"a$e &ata Casses=
C1a*'* D'*&ripti0n
>!66'r'(i-ag' /y rjng i-ag' &Di t Lrit'a@1'.'n('r'(i-ag'
/ut Wnh vi -ut @u E- (Z 1iE! &x thT tr!3 &p.
httpBOOtai1i'!ha3.&0-
12<
Lp trnh ha trn Java 2D v 3D
/ut >!66'r'(i-ag' &x -ut C010r/0('1 vD -ut
.a*t'r (Z 1iE! Wnh.
>3t'L00;!pTa@1' /y rung L00;!pTa@1'
/ut L00;!pTa@1' &haa &C& @3' (Z 1iE!.
Data>!66'r >a0 @& -ut ha3 nhi"! &C& -Wng (Z 1iE! &haa (Z
1iE! iT-. /\i -Wng R& gi 1D @an;
Data>!66'r>3t' /y rung Data>!66'r. /ut @u E- (Z 1iE! &haa &C&
@3t' (Z 1iE!. f (_ng tr0ng Java #(van&'(
i-aging #P$g
Data>!66'rint /y rung Data>!66'r f8ina1gg
/ut @u E- (Z 1iE! &haa (Z 1iE! *Q ng!3In fa
(_ng tr0ng Java #van&' i-aging #P$g
Data>!66'r2h0rt /y rung Data>!66'r f8ina1g
/ut @u E- (Z 1iE! &haa (Z 1iE! *Q ng!3In *h0rt
f (_ng tr0ng Java #(van&'( i-anging #P$g.
Data>!66'r42h0rt /y rung Data>!66'r f8ina1g
/ut @u E- (Z 1iE! &haa (Z 1iE! *Q ng!3In *h0rt
;hjng (]!.
i'rn'1 /ut -a trn -j tW &C&h nhp -ut (Z
1iE! vD &C& iT- @iIn &wa nx tC& ung Jn giC trU
&wa iT- tr0ng @u 1& C0nv01v'MP
L00;!pTa@1' /y rung M@N'&t
/ut @Wng Cnh ,e &C& giC trU tt (Z 1iE! iT- n
@Vng ti &C& giC trU -D!.
.a*t'r /ut -Wng &C& iT- gx& tt x @en &x thT nhn v"
&C& (Z 1iE! iT-. /ut .a*t'r &haa -ut Data>!66'r
vD -ut 2a-p1'/0('1.
2h0rtL00;!pTa@1' /y rung L00;!pTa@1'
/ut @Wng tha- &hiJ! &haa &C& (Z 1iE! *Q ng!3In
*h0rt
Lrita@1'.a*t'r /y rung .a*t'r
/ut .a*t'r &x thT &hnh *Ga.
httpBOOtai1i'!ha3.&0-
12=
Lp trnh ha trn Java 2D v 3D
2.(.* i"a$e Fperation Casses
C1a*'* D'*&ripti0n
#66in'Tran*60r-Mp CDi t B >!66'r'(i-ag'Mp+ .a*t'rMp
/ut 1p Unh nghha -ut @iJn i a66in' T th`&
hiEn -ut *` Cnh ,e t!3Jn tvnh tt &C& t0e u 2D
tr0ng -ut Wnh ng!n h0& .a*t'r *ang &C& t0e u
2D tr0ng Wnh v&h h0& .a*t'r. Lp nD3 &x thT th`&
hiEn &W Cnh ,e *0ng Cnh vD &C& phcp t0Cn @iJn i
1Cng gi"ng gn nh]t.
>an(C0-@in'Mp CDi t .a*t'rMp
D_ng -ut -a trn ,C& Unh+ tha0 tC& nD3 th`& hiEn
-ut *` ;Jt hRp t!3Jn tvnh t! H &wa &C& (Wi @an(
tr0ng -ut .a*t'r.
>!66'r'(i-ag'8i1t'r /y rung i-ag'8i1t'r
/ut i-ag'8i1t'r &!ng &]p -ut &C&h n giWn &wa
viE& *_ng -ut >!66'r'(i-ag'Mpft0Cn tG -ut
ng!n n O-ut v&h ng T 1& -ut
>!66'r'(i-ag' h0& .a*t'r.
C010rC0nv'rtMp CDi t >!66'r'(i-ag'Mp+ .a*t'rMp
Th`& hiIn *` &h!3Tn i (Z 1iE! -D! iT- th'0
iT- tr0ng Wnh ng!n.
C0nv01v'Mp CDi t >!66'r'(i-ag'Mp+ .a*t'rMp
D_ng -ut i'rn'1 T th`& hiEn &Wi thiEn Wnh ng!n.
/ut *` &Wi thiEn 1D -ut *` ta0 tC& ;hjng gian ni
&C& iT- &n @iIn vD0 R& nhsn @ui @yi -ut giC
trU i'rn'1 T te0 giC trU &wa iT- ra. i'rn'1 Unh
nghha -ut &C&h t0Cn h& !an hE giZa &C& iT-
tr0ng !an hE 1Cng gi"ng tr!ng gian &wa iT- vD0
vD iT- ra.
httpBOOtai1i'!ha3.&0-
129
Lp trnh ha trn Java 2D v 3D
L00;!pMp CDi t >!66'r'(i-ag'Mp+ .a*t'rMp
Th`& hiEn tha0 tC& tha- &hiJ! tt ng!n ti v&h.
Xi &C& .a*t'r+ &C& tha0 tC& tha- &hiJ! trIn &C& giC
trU -!+ &C& >!66'r'(i-ag'+ tha0 tC& tha- &hiJ!
trIn thDnh phn -D! vD thDnh phn a1pha.
.'*&a1'Mp CDi t >!66'r'(i-ag'Mp+ .a*t'rMp
Th`& hiEn viE& vY 1ei iT- @yi iT- fpi,'1 @3 pi,'1
r'*&a1ingg &wa (Z 1iE tr0ng Wnh ng!n @yi viE& nhsn
-\i giC trU iT- vi hE *Q vD *a! x thI- vD0 -ut
phn &hInh fan 066*'tg.
2.(.- Sa"pe /ode Casses
C1a*'* D'*&ripti0n
>an('(2a-p1'/0('1 /y rung C0-p0n'nt2a-p1'/0('1
f8ina1g
C!ng &]p tr!3 &p (Z 1iE! Wnh &haa
giQng nh &C& -! &haa nh nhZng
(Wi f@an(*g tr0ng &C& @an; riIng @iEt
&wa Data>!66'r. /ut iT- @a0 g-
-ut -! tt -\i (Wi f@an(g
C0-p0n'nt2a-p1'/0('1 /y rung 2a-p1'/0('1
C!ng &]p tr!3 &ep ti (Z 1iE! Wnh &haa
vi -\t -! &wa -jt iT- tsp tr!ng
tr0ng -\i phn tG riIng @iEt &wa
Data>!66'r. CC& 10ei &hn iT- ;hC&
nha! R& h\ trR
/!1tiPi,'1Pa&;'(2a-p1'/0('1 /y rung 2a-p1'/0('1
Pi,'1int'r1'av'(2a-p1'/0('1 /y rung C0-p0n'nt2a-p1'/0('1
C!ng &]p tr!3 nhp ti (Z 1iE! Wnh
&haa (Z 1iE! -! &h0 -\i iT- tr0ng
httpBOOtai1i'!ha3.&0-
150
Lp trnh ha trn Java 2D v 3D
&C& phn tG hiE! &hnh &wa -Wng (Z
1iE!+ vD t]t &W &C& phn tG tr0ng @an;
n &wa -ut Data>!66'r.
2a-p1'/0('1 /ut 1p trt! tRng Unh nghha -ut &
&hJ &h0 vik& ,!]t ra (Z 1iE! -! tt -ut
Wnh -D ;hjng @iJt &C&h (Z 1iE! R&
&haa tr0ng -ut Data>!66'r.
2ing1'Pi,'1Pa&;'(2a-p1'/0('
1
/y rung 2a-p1'/0('1
C!ng &]p tr!3 nhp ti (Z 1iE! Wnh
R& @W0 !Wn vi t]t &W &C& -! phb
th!u& vD0 &C& iT- riIng 1 gxi vD0
tr0ng -ut phn tG &wa -ut Data>!66'r.
Coor /ode Casses
C1a*'* D'*&ripti0n
C010r/0('1 CDi t 1p tr0ng *!Qt Unh nghha &C&
phng tha& &h0 viE& &h!3Tn i tt &C& giC
trU iT- Cnh ti &C& thDnh phn -D! nh +
,anh 1C &s3+ ,anh (a trzi fr'(+ gr''n+ @1!'g.
C0-p0n'ntC010r/0('1 /y rung C010r/0('1
/ut C010r/0('1 &x thT giZ -ut C010r2pa&'
&x thT tha3 i+ -ut -Wng &C& thDnh phn
-D! ang vi C010r2pa&'. Lp nD3 &x thT
R& (_ng T @iT! (ikn h! hJt &C& -0('1
-D! trIn h! hJt &C& 10ei thiJt @U h0e
f)raphi&*D'vi&'*g
httpBOOtai1i'!ha3.&0-
151
Lp trnh ha trn Java 2D v 3D
Dir'&tC010r/0('1 /y rung 1p Pa&;'(C010r/0('1 JDi1.1 .
/ut C010r/0('1 @iT! (ikn &C& giC trU &x
&C& thDnh phn -D! .)> nhng tr`& tiJp
tr0ng &C& @it &wa iT-. /0('1 -D! nD3
tng t` vi -ut r11 Tr!'C010r. .)>
C010r/0('1 -& Unh R& trW v" @yi
C010r/0('1.g't.)>('6a!1t nh -ut
Dir'&tC010r/0('1. in(',C010r/0('1
%,t'n(*B C010r/0('1
Pa&;'(C010r/0('1 /y rung C010r/0('1.
/ut C010r/0('1 trt! tRng @iT! (ikn &C&
giC trU iT- &x &C& thDnh phn nhng tr`&
tiJp tr0ng &C& @it &wa -ut iT-.
Dir'&tC010r/0('1 -y rung
Pa&;'(C010r/0('1 T h\ trR &C& iT- &haa
&C& thDnh phn -D! .)>.
2a-p1'/0('1 /ut 1p trt! tRng Unh nghha -ut & &hJ
&h0 vik& ,!]t ra (Z 1iE! -! tt -ut Wnh -D
;hjng @iJt &C&h (Z 1iE! R& &haa tr0ng
-ut Data>!66'r.
2.(.3 )xception Casses
C1a*'* D'*&ripti0n
i-agingMp%,&'pti0n /y rung .!nti-%,&'pti0n.
[a ra nJ! -ut tr0ng &C& phng tha&
>!66'r'(i-ag'Mp h0& .a*t'rMp ;hjng thT
,G 1H Wnh.
.a*t'r80r-at%,&'pti0n /y rung .!nti-%,&'pti0n.
httpBOOtai1i'!ha3.&0-
152
Lp trnh ha trn Java 2D v 3D
Te0 ra nJ! &x -ut thjng tin @Q trv ;hjng
hRp 1E tr0ng .a*t'r.
=.2 1!!ediate $%de i!a"in" *%ncepts
/0('1 te0 Wnh -0(' tr!ng gian h\ trR &C& phsn giWi &Q Unh &haa
tr0ng @u nh. /0('1 &ng h\ trR &C& tha0 tC& 1& trIn (Z 1iE! Wnh. /ut *Q
&C& 1p vD &C& gia0 (iEn R& (_ng tr0ng -0('1 nD3
Knh 9P1 >!66'r'(i-ag' vD &C& 1p h\ trR.
Sh hnh 9P1+ Bufferedi"a$e &!ng &]p viE& !Wn 1H Wnh &h!ng. /ut
Bufferi"a$e &x thT R& te0 tr`& tiJp tr0ng @u nh vD R& (_ng T giZ
vD tha0 tC& (Z 1iE! Wnh nhn tt -ut 6i1' h0& 4.L. /ut
Bufferedi"a$e &x thT R& hiTn th (_ng @]t &a Qi tRng Graphics%&
nD0 &h0 -ut thiJt @U -Dn hnh+ h0& 3 ti @]t &a v&h nD0 ;hC& (_ng
ngZ &Wnh tng thv&h Graphics%&. /ut Qi tRng Bufferedi"a$e &haa 2
Qi tRng ;hC&B -ut #aster vD -ut Coor/ode.
Lp #aster &!ng &]p !Wn 1H (Z 1iE! Wnh. Sx @iT! (ikn t0e u ('P&a&
&wa Wnh vD (!3 tr (Z 1iE! Wnh tr0ng @u nh+ vD &!ng &Cp -ut & &hJ &h0
httpBOOtai1i'!ha3.&0-
155
Lp trnh ha trn Java 2D v 3D
ta0 Wnh v nhi"! Wnh nh tt -ut @u E- (Z 1iE! Wnh n. Sx &ng &!ng
&]p &C& phng tha& &h0 viE& tr!3 &p &C& iT- ,C& Unh vi -ut
Wnhfi-ag'g. /ut i tRng #aster &haa hai Qi tRng ;hC&+ -ut
&ataBuffer vD -ut 2a-p1'/0('1.
Lp &ataBuffer giZ (Z 1iE! iT- tr0ng @u nh.
Lp Sa"pe/ode thT hiEn (Z 1iE! tr0ng @u E- vD &!ng &]p n0 nh
&C& iT- riIng rY h0& (Wi iT- &hZ nht.
i"a$e Pa&;ag' &!ng &]p thI- &C& 1p Unh nghha &C& tha0 tC& 1&
trIn &C& Qi tRng Bufferedi"a$e vD #aster. /i tha0 tC& ,G 1H Wnh
R& nhng tr0ng 1p &Di t gia0 (iEn Bufferedi"a$eFp+ gia0 (iEn
#asterFp+ h0& &W hai gia0 (iEn. 1p tha0 tC& Unh nghha &C& phng tha&
1& f6i1t'rg th`& hiEn tha0 tC& Wnh th`& *`.
Knh 9P2 -inh h0e -0('1 & @Wn &h0 Java 2DA #P$ i-ag' ,G 1H
Wnh.
CC& tha0 tC& h\ trR @a0 g-B
>iJn i #66in'
#-p1it!(' *&a1ing
L00;!pPta@1' -0(i6i&ati0n
Lin'ar &0-@inati0n 06 @an(*
C010r &0nv'r*i0n
httpBOOtai1i'!ha3.&0-
157
Lp trnh ha trn Java 2D v 3D
C0nv01!ti0n
Ch H rng nJ! @en thv&h hiTn thU vD tha0 tC& &C& Wnh+ @en &h &n
hiT! 1p Bufferedi"a$e vD &C& 1p tha0 tC& 1&. /t ;hC&+ nJ! @en &x H
Unh viJt &C& @u 1& h0& tr`& tiJp tr!3 nhp (Z 1iE! Wnh+ @en &n phWi
hiT! &C& 1p 1iIn !an vi Bufferedi"a$e.
2.%.( Ter"inoo$'
s3 &x vDi ;hCi niE- R& (_ng !a &C& thW0 1!n (i s3B
CC& phn tG (Z 1iE!PData %1'-'nt*B &C& 10ei ng!3In tQ (_ng nh 1D &C&
n vU 1! trZ (Z 1iE! Wnh. CC& Data '1'-'nt 1D &C& thDnh viIn riIng 1
&wa -ut -Wng Data>!66'r. >Q trv f1a30!tg&wa &C& phn tG tr0ng @u E- (Z
1iE! 1D u& 1p vi &C&h @iT! ikn &wa (Z 1iE! nh 1D &C& iT- @yi -ut
2a-p1'/0('1 &wa Wnh.
Cc #Gu F Sa#plesB CC& thDnh viIn riIng @iEt &wa &C& iT- &wa -ut
Wnh. /ut 2a-p1'/0('1 &!ng &]p -ut & &hJ &h0 viE& &h!3Tn i &C&
phn tG tr0ng Data>!66'r *ang &C& iT- vD &C& -! &wa nx. CC& -! &wa
-ut iT- &x thT @iT! (ikn &C& giC trU ng!3In th! tr0ng -0('1 -D! &b
thT. Xv (b+ -ut iT- tr0ng -0('1 -D! .)> @a0 g- 5 -! B r'(+ gr''n
vD @1!'.
Cc thHnh phIn F Co#ponentsB CC& giC trU &wa &C& iT- u& 1p vi
*` @iT! (ikn -D!. 2` phsn @iEt giZa thDnh phnf&0-p0n'ntg vD
-!f*a-p1'g 1D hZ! v&h vi in(',C010r/0('1+ ni -D &C& thDnh phn
iT- R& Cnh &h *Q *ang L00;!pTa@1'.
DJi F Kan'B Tp t]t &W &C& -! &wa -ut 10ei tr0ng -ut Wnh+ giQng nh
t]t &W &C& -! -D! h0& t]t &W &C& -! -D! ,anh 1C &s3. DZ 1iE! iT-
&x thT R& &haa tr0ng -ut *Q &C&h+ h\ trR hai tr0ng Java 2D #P$ ang
R& tb hp vD thI- vD0. L! trZ tp hRp t &ha& (Z 1iE! Wnh @yi &C& (Wi
f@an(*g+ vD -ut iT- R& trang @U -t (Z 1iE! -! tt vU trv -! vi
httpBOOtai1i'!ha3.&0-
159
Lp trnh ha trn Java 2D v 3D
-Wng n &haa t]t &W &C& iT-+ vD &C& (Wi @a0 g- tp &C& -! &_ng &h
*Q vU trv tr0ng -\i iT-.
Cc ngu&n tL F -ri#ariesB CC& thDnh viIn phsn @iEt &wa -ut giC trU
-D! tr0ng -ut -0('1 -D! ,C& Unh+ vv (b -0('1 .)> (eng &C& giC trU
-D! tt &C& ng!3In tQ r'(+ gr''n+ vD @1!'.
=.< Ksin" '9--eredi!a"es
Lp Bufferedi"a$e 1D 1p &hvnh h\ trR -0(' te0 Wnh tr!ng gian. Sx
&ng !Wn 1H -t Wnh tr0ng @u nh+ &!ng &]p &C& &C&h T 1! &C& (Z 1iE!
iT-+ @iT! (ikn (Z 1iE! iT-+ vD 3 (Z 1iE! iT- ti -ut )raphi&* h0&
ngZ &Wnh Graphics%&.
2.*.( Creatin$ a Bufferedi"a$e
[T te0 -ut Bufferedi"a$e+ gi Co"ponent.createi"a$et+ hD- nD3
trW v" -t Bufferedi"a$e &C& & tvnh vY &wa nx tng ang &C& thDnh
phn (_ng te0 nx. nh R& te0 1D ;hjng r + phn ni vD phn n"n
&x &C& -D! &wa &C& thDnh phn @en ;hjng thT hiE! &hnh u tr0ng &wa
-ut Wnh.>en &x thT (_ng ; th!t nD3 ;hi @en -!Qn 1D- g]p ji @u I-
vY Wnh &h0 *` ung tr0ng -ut thDnh phn.
pub*ic %raphics() create)emo%raphics()(%raphics
g& Q
%raphics() g( = nu**'
int width = get0ize(&.width'
int height = get0ize(&.height'
if (offimg == nu** UU offimg.getVidth(& P=
width UU
offimg.get1eight(& P= height& Q
httpBOOtai1i'!ha3.&0-
15:
Lp trnh ha trn Java 2D v 3D
offimg = (Bufferedimage& createimage(width,
height&'
2
if (offimg P= nu**& Q
g( = offimg.create%raphics(&'
g(.setBacWground(getBacWground(&&'
2
// .. c*ear can.as .. g(.c*ear$ect(+, +,
width, height&'
return
2
>en &ng &x thT te0 -ut Bufferedi"a$e trQng tr0ng @u nh (_ng
-ut vDi hD- te0 R& &!ng &]p.
2.*.% &ra1in$ in an Fffscreen Buffer
Lp Bufferedi"a$e &x thT !R& _ng T &h!n @U &C& phn tG h0e
;hjng hiITn thU f066*&r''n g*a! x &0p3 &hng ra -Dn hnh. i th!t nD3
hZ! v&h & @iEt ;hi -ut graphi& pha& tep h0& (_ng 1p 1ei. Xv (b+ nJ!
@en -!Qn hiTn thUhnh Wnh tinh vi tr0ng vDi 1n+ @en &x thT vY nx -ut 1n
tr0ng @u E- 066*&r''n vD *a! x &0p3 nx ti &C& vU trv ;hC& nha! trIn &Ga
*. >ng viE& vY &C& hnh -ut 1n vD viE& *a0 &hcp nx @en &x thT hiTn thU
h0e nhanh hn.
>ava.a1t pa&;ag' &x ;hW nVng (_ng &C& @u E- 066*&'a- @yi i"!
nD3 @en vY -ut Qi tRng Wnh &_ng &C&h -D @en vY ra &Ga *. T]t &W &C&
httpBOOtai1i'!ha3.&0-
15<
Lp trnh ha trn Java 2D v 3D
tvnh nVng 3 fr'n('ringg y Java 2DA #P$ &x thT R& (_ng ;hi vY &C&
Wnh 066*&r''n.
CC& @u E- 066*&r''n thzng R& (_ng &h0 h0et h0e. Xv (b+ @en &x
thT (_ng -ut @u E- 066*&r''n T vY -ut Qi tRng -ut 1n vD *a! x
&h0 nx &h!3Tn ung tr0ng -ut &Ga *. Tng t`+ @en &x thT (_ng -ut @u
E- 066*&r''n T &!ng &]p *` hi tiJp nh ;hi ngzi (_ng (i &h!3Tn -ut
hnh (_ng &h!ut. Tha3 vD0 viE& vY 1ei hnh tei -\i vU trv+ @en &x thT vY
hnh -ut 1n ra @u E- 066*&r''n vD *a! x &0p3 nx ti vU trv &h!ut nh
;hi ngzi (_ng thW &h!utf(rag th' -0!*'g.
Knh 9P54*ing an M66*&r''n >!66'r
Knh 9P5 -j tW &C&h -ut &hng trnh &x thT vY ra -ut 066*&r''n
i-ag' *a! x *a0 &hcp nx ra -ut &Ga * nhi"! 1n. Ln &!Qi &_ng Wnh
R& *a0 &hcp+ nx R& @iJn i. Ch H rng *` @iJn i Wnh tha3 &h0
viE& vY 1ei nx vi *` @iJn i &x thT ;Jt !W ;hjng R& th0W -n.
M.(.2.1 Creating an 1!!screen Ku!!er
httpBOOtai1i'!ha3.&0-
15=
Lp trnh ha trn Java 2D v 3D
CC&h n giWn nh]t T te0 ra -ut i-ag' -D @en &x thT (_ng nh -ut
066*&r''n @!66'r 1D (_ng phng tha& Co"ponent.createi"a$e.
>ng viE& te0 -ut i-ag' -D ;hjng gian -D! &wa nx+ *s!+ vD @Q trv
&C& iT- &hvnh ,C& vi &Ga * tr0ng x @en ang vY+ i-ag' &x thT R&
a ti f@1itt'(g thiJt @U h0e -ut &C&h hiE! !W. [i"! nD3 &h0 phcp
hD- (ra?i-ag' 1D- viE& nhanh &hxng.
>en &ng &x thT te0 -ut Qi tRng Bufferedi"a$e tr`& tiJp T (_ng nh
1D -ut 066*&r''n @!66'r. [i"! nD3 r]t hZ! v&h ;hi @en &n i"! ;hiTn !a
;iT! &wa 066*&r''n h0& tr0ng *!Qt.
Bufferedi"a$e h\ trR vDi ;iT! Unh nghha tr&B
T|P%5>|T%>).
T|P%7>|T%#>).
T|P%7>|T%#>).P.%
T|P%>|T%>iS#.|
T|P%>|T%).#|
T|P%>|T%iSD%r%D
T|P%C42TM/
T|P%iST#.)>P.%
T|P%iST#.)>
T|P%iST>).
T|P%iST.)>
T|P%42KM.T999.)>
T|P%42KM.T9:9.)>
T|P%iST).#|
/ut Qi tRng Bufferedi"a$e &x thT &haa -ut ;Inh a1pha. Tr0ng
hnh 9P5+ -ut ;Inh a1pha R& (_ng T phsn @iEt &C& v_ng R& vY vD
;hjng R& vY+ &h0 phcp -ut hnh (eng @]t !3 t^& ,!]t hiEn !a &C&
hnh -D @en vY ftr0ng trzng hRp nD3+ -ut hnh &hZ nht @xngg. Tr0ng
httpBOOtai1i'!ha3.&0-
159
Lp trnh ha trn Java 2D v 3D
vDi trzng hRp ;hC&+ @en &x thT (_ng -ut ;Inh a1pha T trun &C& -D! &wa
-ut Wnh -i vD0 nx tr0ng -ut Wnh tn tei.
ChN ; tr< -hi 3=n &>n +5t d? li@u Anh alpha &ho rB rng0 nh8 vCi
+5t hnh Anh d=ng 3Dt th8Eng 3iFu diGn trong hnh HI20 3=n nn trJnh
t=o +5t 35 @+ offs&ree+ alpha1 DKng alpha L nMi nN -hOng &>n l+
&h+ hi@u nPng render1
%raphi&s)onfiguration &ung &Dp &J& ph8Mng thQ& thun ti@n tR 5ng t=o
&J& 35 @+ Anh trong Snh d=ng t8Mng thT&h vCi &Du hnh &6a 3=n1 2=n
&Ung &N thF lDy vV &Du hnh ho= lin -Wt vCi thiWt 3S ho= trn N &Xa
sY tp trung F lDy thOng tin0 3=n &>n -hLi t=o +5t 7i t89ng
2ufferedi+age thT&h h9p
M.(.2.2 Dra/ing in an 1!!screen Ku!!er
[T vY tr0ng -ut @u E- Wnh+ )i Bufferi"a$e.&reate%raphi&sfg + tra
v" -ut Qi tRng Graphics%&. Xi Qi tRng nD3+ &x thT gi tCt &W &C&
phng tha& Graphics%& T vY &C& hnh Wnh ng!3In tQ+ t',t+ vD r'n('r
&C& hnh Wnh ;hC& tr0ng i-ag'. i th!t vY nD3 h\ trR viE& r!ng ung vD
&C& &Wi thiEn ;hC& R& &!ng &]p @yi 2D i-aging pa&;ag'.
[0en &0(' (i s3 -inh h0e *G (bng 066*&r''n @!66'ring B
pub*ic .oid update(%raphics g&Q
%raphics() g( = (%raphics()&g'
if(firstTime&Q
)imension dim = get0ize(&'
int w = dim.width'
int h = dim.height'
area = new $ectang*e(dim&'
bi = (Bufferedimage&createimage(w, h&'
big = bi.create%raphics(&'
httpBOOtai1i'!ha3.&0-
170
Lp trnh ha trn Java 2D v 3D
rect.setNocation(w/(X5+, h/(X(5&'
big.set0troWe(new Basic0troWe(Y.+f&&'
firstTime = fa*se'
2
// C*ears the rectang*e that was pre.ious*,
drawn. big.setCo*or(Co*or.white&'
big.c*ear$ect(+, +, area.width, area.height&'
// )raws and fi**s the new*, positioned
rectang*e to the buffer.
big.setaint(stroWeo*Wa&'
big.draw(rect&' big.setaint(fi**o*Wa&'
big.fi**(rect&'
// )raws the buffered image to the screen.
g(.drawimage(bi, +, +, this&'
2
2.*.* /anipuatin$ Bufferedi"a$e &ata &irect'
C_ng vi viE& vY Wnh tr`& tiJp tr0ng Bufferedi"a$e+ @en &x thT tr!3
&p tr`& tiJp vD ,G 1H (Z 1iE! iT- Wnh tr0ng 2 &C&h. ShZng &C&h nD3 hZ!
v&h nJ! ven ang &Di t gia0 (iEn @u 1& Bufferedi"a$eFp nh R&
-j tW tr0ng &hng ,G 1H vD &Wi thiEn Wnh.
>en &ng &x thT (_ng phng tha& Bufferedi"a$e.set(%2 T t
tr`& tiJp giC trU &wa -ut iT- h0& -ut -Wng &C& iT- ti -ut giC trU
.)> ,C& Unh. Ch H rng+ ;hjng &x *` 1a3 ung ;hi @en -0(i63 &C&
httpBOOtai1i'!ha3.&0-
171
Lp trnh ha trn Java 2D v 3D
iT- -ut &C&h tr`& tiJp. >en &ng &x thT ,G 1H (Z 1iE! iT- Wnh @yi viE&
,G 1H -ut Qi tRng Arita,e#aster 1iIn ;Jt vi -ut Bufferedi"a$e
2.*.- +iterin$ a Bufferedi"a$e
>en &x thT ang (bng -ut @u 1& &h0 -ut Bufferedi"a$e (_ng -ut
Qi tRng &Di t Bufferedi"a$eFp. XiE& 1& vD &C& 1p &!ng &]p gia0
(iEn 1& thW0 1!sn tr0ng phn rG 1H vD &Wi thiEn Wnh fi-ag' Pr0&'**ing
an( %nhan&'-'ntg.
2.*.2 #enderin$ a Bufferedi"a$e
[T r'n('r -ut @u E- Wnh vD0 tr0ng -ut ngZ &Wnh &b thT+ gi hD-
(ra?ia-g' &wa ngZ &Wnh &wa Qi tRng )raphi&*. Xv (b ;hi r'n('ring
tr0ng phng tha& Co"ponent.paint+ @en gi drai+agefg trIn Qi
tRng h0e tr!3"n &h0 phng tha&.
pub*ic .oid paint(%raphics g& Q
if (get0ize(&.width Z= + UU get0ize(&.height
Z= +&
return'
%raphics() g( = (%raphics()& g'
if (offimg P= nu** [[ is0howing(&& Q
g(.drawimage(offimg, +, +, this&'
2
2
Chng trnh vv (bB
httpBOOtai1i'!ha3.&0-
172
Lp trnh ha trn Java 2D v 3D
import \a.a.awt.]'
import \a.a.awt.e.ent.]'
import \a.a.app*et./pp*et'
import \a.a.awt.image.]'
pub*ic c*ass Buffered0hapeMo.er extends /pp*et Q
static protected Nabe* *abe*'
pub*ic .oid init(& Q
setNa,out(new BorderNa,out(&&'
add(new B0MCan.as(&&'
*abe* = new Nabe*(^?_t h`nh ch; nh<t na,
xung buanh .cng frame.^&'
add(^0outh^, *abe*&'
2
pub*ic static .oid main(0tring sKL& Q
drame f = new
drame(^Buffered0hapeMo.er^&'
f.addVindowNistener(new Vindow/dapter(& Q
pub*ic .oid
windowC*osing(Vindow!.ent e& Q
0,stem.exit(+&'
2
2&'
/pp*et app*et = new Buffered0hapeMo.er(&'
f.add(^Center^, app*et&'
httpBOOtai1i'!ha3.&0-
175
Lp trnh ha trn Java 2D v 3D
app*et.init(&'
f.pacW(&'
f.set0ize(new )imension(55+, (5+&&'
f.show(&'
2
2
c*ass B0MCan.as extends Can.as imp*ements
MouseNistener, MouseMotionNistener Q
$ectang*e rect = new $ectang*e(+, +, O++,
5+&'
Bufferedimage bi'
%raphics() big'
int *ast"x, *ast",'
boo*ean firstTime = true'
Textureaint fi**o*Wa, stroWeo*Wa'
$ectang*e area'
boo*ean press-ut = fa*se'
pub*ic B0MCan.as(& Q
httpBOOtai1i'!ha3.&0-
177
Lp trnh ha trn Java 2D v 3D
setBacWground(Co*or.white&'
addMouseMotionNistener(this&'
addMouseNistener(this&'
bi = new Bufferedimage(5, 5,
Bufferedimage.TY!"i#T"$%B&'
big = bi.create%raphics(&'
big.setCo*or(Co*or.pinW&'
big.fi**$ect(+, +, e, e&'
big.setCo*or(Co*or.c,an&'
big.fi**-.a*(+, +, f, f&'
$ectang*e r = new $ectang*e(+, +, 5, 5&'
fi**o*Wa = new Textureaint(bi, r&'
big.dispose(&'
bi = new Bufferedimage(5, 5,
Bufferedimage.TY!"i#T"$%B&'
big = bi.create%raphics(&'
big.setCo*or(Co*or.c,an&'
big.fi**$ect(+, +, e, e&'
big.setCo*or(Co*or.pinW&'
big.fi**-.a*(+, +, f, f&'
r = new $ectang*e(+, +, 5, 5&'
stroWeo*Wa = new Textureaint(bi, r&'
big.dispose(&'
2
pub*ic .oid mouseressed(Mouse!.ent e& Q
*ast"x = rect.x X e.getg(&'
httpBOOtai1i'!ha3.&0-
179
Lp trnh ha trn Java 2D v 3D
*ast", = rect., X e.getY(&'
if (rect.contains(e.getg(&, e.getY(&&& Q
updateNocation(e&'
2 e*se Q
Buffered0hapeMo.er.*abe*
.setText(^?Eu tihn 4_t con
tri *hn h`nh ch; nh<t .a Wjo.^&'
press-ut = true'
2
2
pub*ic .oid mouse)ragged(Mouse!.ent e& Q
if (Ppress-ut& Q
updateNocation(e&'
2 e*se Q
Buffered0hapeMo.er.*abe*
.setText(^?Eu tihn 4_t con
tri *hn h`nh ch; nh<t .a Wjo.^&'
2
2
pub*ic .oid mouse$e*eased(Mouse!.ent e& Q
if (rect.contains(e.getg(&, e.getY(&&& Q
updateNocation(e&'
2 e*se Q
Buffered0hapeMo.er.*abe*
httpBOOtai1i'!ha3.&0-
17:
Lp trnh ha trn Java 2D v 3D
.setText(^?Eu tihn 4_t con
tri *hn h`nh ch; nh<t .a Wjo.^&'
press-ut = fa*se'
2
2
pub*ic .oid mouseMo.ed(Mouse!.ent e& Q
2
pub*ic .oid mouseC*icWed(Mouse!.ent e& Q
2
pub*ic .oid mouse!xited(Mouse!.ent e& Q
2
pub*ic .oid mouse!ntered(Mouse!.ent e& Q
2
pub*ic .oid updateNocation(Mouse!.ent e& Q
rect.setNocation(*ast"x k e.getg(&,
*ast", k e.getY(&&'
if (checW$ect(&& Q
Buffered0hapeMo.er.*abe*.setText(^1`nh ch;
nh<t I .l trm n ^
k rect.getg(& k ^X ^ k
rect.getY(&&'
2 e*se Q
httpBOOtai1i'!ha3.&0-
17<
Lp trnh ha trn Java 2D v 3D
Buffered0hapeMo.er.*abe*
.setText(^?ong c3 gpng 45a
h`nh ra ngoai frame.^&'
2
repaint(&'
2
pub*ic .oid paint(%raphics g& Q
update(g&'
2
pub*ic .oid update(%raphics g& Q
%raphics() g( = (%raphics()& g'
if (firstTime& Q
)imension dim = get0ize(&'
int w = dim.width'
int h = dim.height'
area = new $ectang*e(dim&'
bi = (Bufferedimage& createimage(w,
h&'
big = bi.create%raphics(&'
rect.setNocation(w / ( X 5+, h / ( X
(5&'
big.set0troWe(new
Basic0troWe(Y.+f&&'
firstTime = fa*se'
2
httpBOOtai1i'!ha3.&0-
17=
Lp trnh ha trn Java 2D v 3D
big.setCo*or(Co*or.white&'
big.c*ear$ect(+, +, area.width,
area.height&'
big.setaint(stroWeo*Wa&'
big.draw(rect&'
big.setaint(fi**o*Wa&'
big.fi**(rect&'
g(.drawimage(bi, +, +, this&'
2
boo*ean checW$ect(& Q
if (area == nu**& Q
return fa*se'
2
if (area.contains(rect.x, rect.,, O++,
5+&& Q
return true'
2
int new"x = rect.x'
int new", = rect.,'
if ((rect.x k O++& q area.width& Q
new"x = area.width X rr'
2
if (rect.x Z +& Q
new"x = XO'
2
if ((rect., k 5+& q area.height& Q
httpBOOtai1i'!ha3.&0-
179
Lp trnh ha trn Java 2D v 3D
new", = area.height X sr'
2
if (rect., Z +& Q
new", = XO'
2
rect.setNocation(new"x, new",&'
return fa*se'
2
2
=.. $ana"in" and $anip9&atin" #asters
/ut Qi tRng Bufferedi"a$e (_ng -ut .a*t'r T !Wn 1H -Wng (Z
1iE! iT- 2 &hi"!. Lp #aster Unh nghha &C& trzng &h0 t0e u hE thQng
&wa WnhP u rung + u &a0+ vD gQ& t0e u. /ut Qi tRng .a*t'r t` nx (_ng
2 Qi tRng T !Wn 1H (Z 1iE! iT-+ -ut &ataBuffer vD -ut
Sa"pe/ode. &ataBuffer 1D Qi tRng 1! giZ (Z 1iE! iT- &h0 ra*t'r
&!ng &]p *` @iT! (ikn @In tr0ng &wa (Z 1iE! iT- tt &ataBuffer.
2.-.( Creatin$ a #aster
Tr0ng h! hJt &C& trzng hRp+ ;hjng &n phWi te0 -ut .a*t'r tr`&
tiJp+ @yi v -ut #aster R& &!ng &]p vi @]t &a Bufferedi"a$e @en te0
tr0ng @u nh. T!3 nhiIn+ -ut tr0ng nhZng hD- ;hyi te0 &wa
Bufferedi"a$e &h0 phcp te0 -ut #aster @yi tr!3"n vD0 tr0ng -ut
Arita,e#aster.
Lp #aster &!ng &]p -ut *Q *Wn *inh f6a&t0r3g hD- thnh &h0 te0 ra
&C& .a*t'r vi &ataBuffers vD Sa"pe/odes @en ,C& Unh. >en &ng &x
thT (_ng &C& @u *Wn *inh nD3 ;hi &Di t &C& 1p @u 1& #asterFp.
httpBOOtai1i'!ha3.&0-
190
Lp trnh ha trn Java 2D v 3D
2.-.% Parent and Chid #asters
Lp #aster ;Jt hRp H tyng &C& ra*t'r &ha vD &0n. [i"! nD3 &x thT &Wi
tiJn hiE! !W 1! trZ @ng viE& &h0 phcp te0 @]t ; *Q @u E- Wnh tt &_ng
-ut &ha. Cha vD &C& &0n &wa nx tha- &hiJ! ti &_ng -ut @u E- (Z 1iE!+
vD -\i &0n &x -ut fu 1E&hg 066*'t ,C&h Unh vD (anh gii &h Unh ti vU
trv Wnh &wa nx tr0ng @u E-. /ut &0n ,C& Unh &ha &wa nx !a @ng hD-
get!arentfg.
[T te0 ra -ut .a*t'r &0n f*!@ra*t'rg+ (_ng phng tha&
#aster.&reate"u3(aster. ihi te0 -ut *!@ra*t'r+ ,C& Unh v_ng &wa &ha
&wa nx -D nx &hiJ- vD ,C& Unh 066*'t &wa nx tt gx& t0e u &wa &ha.
1perations on a 2aster
Lp #aster Unh nghha -ut *Q &C&h T tr!3 &p tr`& tiJp &C& iT- vD
(Z 1iE! iT-. [i"! x r]t hZ! v&h ;hi ;hi @en &Di t gia0 (iEn #asterFp+
nx &!ng &]p @u 1& &]p vD ,G 1H (Z 1iE! &wa Wnh+ h0& ;hi &Di t @]t &a
-ut phng tha& nD0 -D &n th`& hiEn ,G 1H iT- y -a& th]p.
CC& phng tha& #aster.get!ixel &h0 phcp 1]3 v" -ut iT- riIng
@iEt+ nx trW v" nh 1D -ut -! riIng @iEt tr0ng -ut -Wng. CC& phng
tha& #aster.getDataZle+ents trW v" -ut phn tG th`& thi &b thT &wa (ikn
(Z 1iE! Wnh ;hjng thT hiEn tt &ataBuffer. Phng tha&
#aster.get"a+ple[\ trW v" -! &wa -ut iT- &b thT. Phng tha&
get"a+ples trW v" -ut (Wi f@an(g &h0 -ut v_ng &b thT &wa -ut i-ag'.
C_ng vi &C& phng tha& x+ Cng &x thT tr!3 &p (Z @u E- vD
-0('1 -! !a &C& @iJn thT nghiE- fin*tan&' varia@1'*g &wa 1p #aster .
CC& Qi tRng nD3 &!ng &]p thI- &C& &C&h tr!3 &p vD @iT! (ikn (Z 1iE!
iT- &wa .a*t'r.
2.-.- The Arita,e#aster Su,cass
Lp &0n Arita,e#aster &!ng &Cp &C& phng tha& T t (Z 1iE!
iT- vD &C& -!. #aster 1iIn ;Jt vi -ut Bufferedi"a$e th`& ra 1D -ut
httpBOOtai1i'!ha3.&0-
191
Lp trnh ha trn Java 2D v 3D
Arita,e#aster v &!ng &]p tr!3 &p 3 w T ,G 1H (Z 1iE! iT- &wa
nx.
=.= 1!a"e Data and Data'9--ers
&ataBuffer phb th!u& vD0 -ut #aster @iT! (ikn -ut -Wng &C& (Z
1iE! Wnh. ihi @en te0 -ut #aster tr`& tiJp h0& !a &C& hD- te0
Bufferedi"a$e+ @en ,C& Unh u rung vD &hi"! &a0 tr0ng &C& pi,'1+ &_ng
vi -ut Sa"pe/ode &h0 (Z 1iE! Wnh. CC& thjng tin x &ng R& (_ng
T te0 -ut &ataBuffer vi (Z 1iE! vD ;iT! vD ;v&h th& ph_ hRp.
Cx 5 1p &0n &wa &ataBuffer+ -\i 1p @iT! (ikn -ut 10ei ;hC& nha!
&wa -ut phn tG (Z 1iE!B
DataKu!!erK&te fr'pr'*'nt* =P@it va1!'*g
DataKu!!erint fr'pr'*'nt* 52P@it va1!'*g
DataKu!!erShort fr'pr'*'nt* 1:P@it va1!'*g
DataKu!!erUShort fr'pr'*'nt* !n*ign'( *h0rt va1!'*g
Sh Unh nghha tt tr&+ &C& phn tG 1D &C& thDnh phn rzi re& &wa
-Wng (Z 1iE! @u E-+ vD &C& thDnh phn h0& &C& -! 1D &C& giC trU rzi
re& ;Jt hRp vi nha! te0 nIn -ut iT-. Cx nhi"! &C&h Cnh ,e giZa ;iT!
&wa phn tG tr0ng -ut &ataBuffer vD ;iT! &wa iT- R& @iT! (ikn @yi
-ut Sa"pe/ode. CC& 1p &0n Sa"pe/ode &ng &x ;hW nVng &Di t
Cnh ,e vD &!ng &]p &C&h T 1]3 &C& iT- ,C& Unh tt -ut &ataBuffer &b
thT.
CC& hD- te0 &ataBuffer &!ng &]p &C& &C&h T te0 &C& @u E- vi
-ut & ,C& Unh vD -ut *Q &C& @an; ,C& Unh.
>en &x thT tr!3 &p (Z 1iE! &wa -ut Wnh tr0ng &ataBuffer -ut &C&h
tr`& tiJp+ @en &ng (k (Dng vD th!n tiEn 1D- i"! x hn !a &C& phng
tha& &wa &C& 1p .a*t'r vD Arita,e#aster.
httpBOOtai1i'!ha3.&0-
192
Lp trnh ha trn Java 2D v 3D
=.> Etractin" Pie& Data -r%! a @a!p&e$%de&
Lp trt! tRng Sa"pe/ode Unh nghha &C& phng tha& &h0
',tra&ting &C& -! &wa -ut Wnh -D ;hjng &n @iJt &C&h (Z 1iE! R& 1!
trZ y @In (i. Lp &!ng &]p &C& trzng &h0 viE& ghi 1ei &hi"! &a0 vD
&hi"! rung &W (Z 1iE! Wnh tr0ng &ataBuffer 1iIn ;It nx + vD &h0 viE& -j
tW *Q 1Rng &C& @an( vD ;iT! (Z 1iE! E-. CC& phng tha& 2a-p1'/0('1
&!ng &]p (Z 1iE! Wnh nh tpf&011'&ti0ng &C& iT-+ vi -\i iT- @a0 g-
&x -ut *Q &C& -! h0& &C& thDnh phn.
0ava.a1t.i"a$e pa&;ag' &!ng &]p nV- 10ei -0('1 -!B
Co#ponentSa#ple%o'el [R& (_ng T ',tra&t &C& iT- tt &C&
i-ag' &haa &C& -! (Z 1iE! tr0ng &C& phn tG -Wng (Z 1iE! riIng tr0ng
-ut @an; &wa -ut Data>!66'r
Kan'e'Sa#ple%o'el [R& (_ng T ',tra&t &C& iT- tt &C&
i-ag' &haa -\i -! tr0ng -ut phn tG (Z 1iE! riIng vi &C& @an( &haa
tr0ng -ut (3 &C& phn tG (Z 1iE!.
-ixelinterleave'Sa#ple%o'el [R& (_ng T ',tra&t &C& iT- tt
&C& i-ag' &haa -\i *a-p1' tr0ng -ut phn tG riIng vxi &C& iT- R&
1! tr0ng -ut (3 t!sn t` f*'!'n&'g &wa &C& phn tG (Z 1iE!.
%ulti-ixel-ac)e'Sa#ple%o'el [R& (_ng T ',tra&t &C& iT-
tt &C& ia-g' n @an( &haa nhi"! -! -ut &C& iT- tr0ng -ut phn tG
(Z 1iE!f !*'( t0 ',tra&t pi,'1* 6r0- *ing1' @an('( i-ag'* that *t0r'
-!1tip1' 0n'P*a-p1' pi,'1* in 0n' (ata '1'-'nt g.
Single-ixel-ac)e'Sa#ple%o'el!*'( t0 ',tra&t *a-p1'* 6r0-
i-ag'*
that *t0r' *a-p1' (ata 60r a *ing1' pi,'1 in 0n' (ata arra3 '1'-'nt in th'
6ir*t
@an; 06 a Data>!66'r.
DZ 1iE! iT- R& @iT! (ikn @yi Sa"pe/ode &x h0& ;hjng thT
1iIn !an tr`& tiJp ti -ut (Z 1iE! -D! @iT! (ikn -ut -0('1 -D! &b thT.
httpBOOtai1i'!ha3.&0-
195
Lp trnh ha trn Java 2D v 3D
phb th!u& vD0 (Z 1iE! ng!n. Xv (b+ tr0ng (Z 1iE! Wnh h0e ph0t0+ &C&
-! &x thT @iT! (ikn (Z 1iE! .)>. Tr0ng (Z 1iE! Wnh tt -ut thiJt @U Wnh 3
tJ+ &C& -! &x thT @iT! (ikn &C& 10ei (Z 1iE! ;hC& nha! gijng nh nhiEt u
h0& -t u ,ng.
Cx @a &at'g0r3 &wa &C& phng tha& &h0 tr!3 &p (Z 1iE! Wnh. CC&
phng tha& g'tPi,'1 trW v" &W -ut iT- tr0ng -ut -Wng+ vi -\i !
vD0 &h0 -\i -!. CC& phng tha& getDataZle+ent &!ng &]p tr!3 &p ti
(Z 1iE! thj+ ;hjng thT hiEn R& &haa tr0ng &ataBuffer. CC& phng
tha& get"a+ple &!ng &]p tr!3 nhp ti &C& thDnh phn iT- &h0 -ut @an(
,C& Unh.
=.L *%&%r$%de&s and *%&%r Data
C_ng vi .a*t'r &h0 !Wn 1H (Z 1iE! Wnh+ 1p Bufferedi"a$e @a0
g- -ut Coor/ode &h0 @iT! (ikn (Z 1iE! nh &C& giC trU iT- -D!.
Lp trt! tRng Coor/ode Unh nghha &C& phng tha& &h0 viE& t &C&
iT- &wa i-ag' -ut giC trU -D! tr0ng CoorSpace 1iIn ;Jt vi nx.
)xi 0ava.a1t.i"a$e &!ng &]p @Qn 10ei -0('1 -D!B
-ac)e'Color%o'el /ut C010r/0('1 trt! tRng @iT! (ikn &C&
giC trU iT- &x &C& thDnh phn -D! R& nhng tr`& tiJp tr0ng &C& @it &wa
-ut iT- ng!3In. Dir'&tC010r/0('1 1D -ut 1p &0n f*!@&1a**g &wa
Pa&;'(C010r/0('1.
DirectColor%o'el-ut C010r/0('1 @iT! (ikn &C& giC trU iT- &x
&C& thDnh phn -D! .)> R& nhng tr`& tiJp tr0ng &C& @it &wa iI-.
Dir'&tC010r/0('1 -0('1 tng t` vi -ut r11 Tr!'C010r vi*!a1.
Co#ponentColor%o'el-ut C010r/0('1 &x thT han(1' -ut
C010r2pa&' tha3 i vD -ut -Wng &C& thDnh phn -D! tng ang vi
C010r2pa&'.
in'exColor%o'el /ut C010r/0('1 @iT! (ikn &C& giC trU -D! vD0
tr0ng @Wn -D! tr0ng ;hjng gian -D! *.)>.
httpBOOtai1i'!ha3.&0-
197
Lp trnh ha trn Java 2D v 3D
D`a trIn (Z 1iE! tr0ng &ataBuffer+ Sa"pe/ode &!ng &]p
Coor/ode &h0 iT-+ Coor/ode *a! x @iT! (ikn nh -ut -D!.
2.?.( Lookup Ta,e
/ut @Wng tha- &hiJ! f100;!p ta@1'g &haa (Z 1iE! &h0 -ut h0& nhi"!
;Inh h0& &C& thDnh phn+ vv (b+ &C& -Wng riIng .+ ) vD >. )0i
0ava.a1t.i"a$e Unh nghha 2 ;iT! @Wng tha- &hiJ! -y rung 1p
L00;!pTa@1' trt! tRng+ -ut &haa @3t' (Z 1iE! vD -ut &haa *h0rt (ata
f>3t'L00;!pTa@1' an( 2h0rtL00;!pDatag.
=.M i!a"e Pr%cessin" and Enhance!ent
$-ag' pa&;ag' &!ng &]p -ut &p gia0 (iEn Unh nghha &C& tha0 tC&
trIn Bufferedi"a$e vD .a*t'r B Bufferedi"a$eFP vD #asterFp.
CC& 1p &Di t nhZng gia0 (iEn nD3 @a0 g- !ffineTransfor"Fp+
BandCo",ineFp+ CoorConvertFp+ ConvoveFp+ LookupFp+
#escaeFp. CC& 1p nD3 &x thT R& (_ng T @iJn i hnh h&+ 1D- -z+
1D- *^&+ thiEn u tng phWn+ ngng+ vD 1D- ng -D!.f @1!r+ *harp'n+
'nhan&' &0ntra*t+ thr'*h01(+ an( &010r &0rr'&t i-ag'*g.
Knh 9P7 -inh h0e phCt hiEn @iIn vD &Wi thiEn + -ut tha0 tC& 1D- @xng
+tha3 i tVng &zng u tr0ng -ut Wnh. PhCt hiEn @iIn thzng R& (_ng
tr0ng ,G 1H Wnh 3 tJ vD &C& ang (bng @Wn . PhCt hiEn @iIn R& (_ng
tVng u tng phWn giZa &]! tr& ;" tr0ng -ut Wnh+ &h0 phcp vi'?'r T
phsn @iEt &hi tiJt hn.
httpBOOtai1i'!ha3.&0-
199
Lp trnh ha trn Java 2D v 3D
8ig!r' 9P7 PhCt hiEn @iIn vD &Wi thiEn Wnh
[0en &0(' *a! s3 -inh h0e phCt hiEn @iInB
f*oatKL e*ements = Q +.+f, XO.+f, +.+f,
XO.+f, s.f, XO.+f,
+.+f, XO.+f, +.+f2'
...
Bufferedimage bimg = new
Bufferedimage(bw,bh,Bufferedimage.TY!"i#T"$%B&'
terne* Werne* = new terne*(f, f, e*ements&'
Con.o*.e-p cop = new Con.o*.e-p(Werne*,
Con.o*.e-p.!)%!"#-"-, nu**&'
cop.fi*ter(bi,bimg&'
Knh 9 P9 ('-0 ,G 1H @Wng tha- &hiJ!. rG 1H @Wng tha- &hiJ! &x thT
R& (_ng T tha3 &h0 &C& thDnh phn riIng 1 &wa -ut iT-.
Knh 9P9 rG 1H L00;!pPTa@1'
[0en &0(' *a! ('-0 tha0 tC& L00;!pPta@1'B
httpBOOtai1i'!ha3.&0-
19:
Lp trnh ha trn Java 2D v 3D
b,te re.erseKL = new b,teK(5uL'
for (int \=+' \Z(++' \kk&Q
re.erseK\L=(b,te&((5uX\&'
2
B,teNooWupTab*e b*ut=new B,teNooWupTab*e(+,
re.erse&'
NooWup-p *op = new NooWup-p(b*ut, nu**&'
*op.fi*ter(bi,bimg&'
Knh 9P: -inh h0e r'*&a1ing. 2escaling &x thT tVng h0& giW- &zng
u &wa t]t &W &C& iT-. 2escaling &x thT R& (_ng T tVng (Wi ung &wa
&C& Wnh t` nhiIn ;hC&+ a ra &hi tiJt tr0ng &C& v_ng t` nhiIn h0&
phng.
Knh 9P: .'*&a1ing
[0en C0(' (i s3 -inh h0e r'*&a1ingB
httpBOOtai1i'!ha3.&0-
19<
Lp trnh ha trn Java 2D v 3D
$esca*e-p rop = new $esca*e-p(O.5f, O.+f,
nu**&'
rop.fi*ter(bi,bimg&'
2.^.( _sin$ an i"a$e Processin$ Fperation
Convolution 1D !C trnh @In (i h! hJt &C& th0t t0Cn 1& ;hjng
gian. C0nv01!ti0n 1a !C trnh Cnh giC f?'ightingg h0& 1D- "!
fav'ragingg giC trU &wa -\i iT- tr0ng -ut Wnh vi &C& gva trU iT- 1sn
&n. [i"! nD3 &h0 phcp -\i iT- ra R& et @yi 1sn &n tr!ng gian
tr0ng &C&h -D( &x thT R& ,C& Unh vi -ut nhsn f;'rn'1g
Knh 9 P< -inh h0e C0nv01!ti0n
[0en - *a! -inh h0e &C&h (_ng -ut tr0ng &C& 1p ,G 1H hnh Wnh+
1p ConvoveFp. Tr0ng vv (b nD3+ -\i iT- tng Wnh ng!n R& 1D-
&sn @ng vi = iT- ,!ng !anh nx.
f*oat weight = O.+f/r.+f'
f*oatKL e*ements = new f*oatKrL' // create
() arra,
// fi** the arra, with nine ebua* e*ements
for (i = +' i Z r' ikk& Q
e*ementsKiL = weight'
2
httpBOOtai1i'!ha3.&0-
19=
Lp trnh ha trn Java 2D v 3D
// use the arra, of e*ements as argument
to create a terne*
pri.ate terne* m,terne* = new terne*(f, f,
e*ements&'
pub*ic Con.o*.e-p simp*eB*ur = new
Con.o*.e-p(m,terne*&'
// sourceimage and destimage are instances
of Bufferedimage
simp*eB*ur.fi*ter(sourceimage, destimage& //
b*ur the image
>iJn si"peBur &haa -ut thT nghiE- -i &wa ConvoveFP &Di t
t0Cn tG @1!r trIn -ut Bufferedi"a$e h0& -ut #aster. )iW Unh rng
*0!r&'i-ag' vD ('*ti-ag' 1D 2 thT nghiE- &wa Bufferedi"a$e. ihi @en
gi 6i1t'r+ &C& phng tha& &hvnh &wa 1p ConvoveFp t giC trU &wa -\i
iT- tr0ng Wnh v&h @yi viE& @ng giC trU tr!ng @nh &wa = iT- ,!ng
!anh iT- tng ang vi nx tr0ng Wnh ng!n.
Shsn &0nv01!ti0n tr0ng vv (b nD3 &x thT R& @iT! (ikn @yi -a trn
(i s3+ vi &C& phn tG ,C& Unh ti 7 phnB
ihi -ut Wnh R& v0nv01v'(+ giC trU &wa -\i iT- tr0ng Wnh v&h
R& tvnh t0Cn @i viE& (_ng -ut nhsn nh 1D -ut tp vi tr!ng @nh &wa
&C& giC trU ,!ng !anh -\i iT- tng ang tr0ng Wnh ng!n. XiE& ,G 1H
nD3 R& th`& hiEn (`a trIn -\i ;Inh &wa Wnh.
httpBOOtai1i'!ha3.&0-
199
Lp trnh ha trn Java 2D v 3D
Cjng tha& *a! @iT! (ikn &C&h &C& trng *Q tr0ng nhsn R& 1iIn hE vi
&C& iT- tr0ng Wnh ng!n ;hi th`& hiEn &0nv01!ti0n. /\i giC trU tng
nhsn R& ti'( ti &C& vU trv tr0ng hnh Wnh.
)iC trU &wa iT- v&h tng tng &C& ;Jt !W &wa trng *Q tr0ng nhsn
R& nhsn vi giC trU &wa &C& iT- ng!n tng ang. Xi nhi"! @u 1&
n giWn+ ;'rn'1 1D -ut -a trn v!jng
C0nv01!ti0n ;'rn'1 tr0ng vv (b nD3 1iIn !an n giWn. Sx 0
f?'ight*g -\i iT- tt hnh Wnh ng!n @yi &hn -ut nhsn 0 f?'ight*g
Wnh ng!n y -a& &a0 hn h0& th]p hn+ -ut &hng trnh &x thT tVng
h0& giW- &zng u &wa Wnh v&h. [Qi tRng 8erne+ R& t tr0ng ;hyi
te0 &wa ConvoveFP + ,C& Unh ;iT! @u 1& nx th`& thi. >yi viE& t &C&
gva trU ;hC&+ @en &x thT th`& hiEn &C& ;iT! &0nv01!ti0n ;hC& nha! @a0 g-
@1!rring fnh )a!**ian @1!r+ ra(ia1 @1!r+ vD -0ti0n @1!rg+ *harp'ning+ vD
*-00thing
Knh 9P= -inh h0e *harp'ning (_ng C0nv01!ti0n.
Knh 9P= 2harp'ning ?ith C0nv01!ti0n
[0en &0(' (i s3 -inh h0e *harp'ning vi
f*oatKL e*ements = Q +.+f, XO.+f, +.+f,
httpBOOtai1i'!ha3.&0-
1:0
Lp trnh ha trn Java 2D v 3D
XO.+f, 5.f, XO.+f,
+.+f, XO.+f, +.+f 2'
...
terne* Werne* = new terne*(f,f,e*ements&'
Con.o*.e-p cop = new Con.o*.e-p(Werne*,
Con.o*.e-p.!)%!"#-"-,
nu**&'
cop.fi*ter(bi,bimg&'
httpBOOtai1i'!ha3.&0-
1:1
Lp trnh ha trn Java 2D v 3D
Chng 5
67u !8
XY Wnh -D! 1D -ut tr0ng nhZng thDnh phn n"n tWng &wa &C& hE thQng
ha vD nx 1!jn 1D ng!n gQ& &wa *` pha& tep tr0ng nhZng j hnh te0
Wnh.Th viEn Java 2DA #P$ &!ng &]p
2` h\ trR &h0 *` te0 Wnh -D! &h]t 1Rng &a0 nhng 1ei (k (Dng *G (bng
CC& 1p !Wn 1H -D! tr0ng Java 2D #P$ gj- CororSpace+ Coor.
/ut CoorSpace @iT! (ikn &h0 -ut hE thjng &h0 viE& Unh 1Rng
-D!+ TiI! @iT! nh @iT! (ikn @ng 5 giC trU *Qf.)>g hV& &C& thDnh
phn.. Lp CoorSoace &haa &C& phng tha& &h0 &h!3Tn i &C& ;hjng
gian -D! vD hai ;hjng gian -D! &h!n 1D Ci%| vD ).>.
/ut Coor 1D -ut -D! &Q Unh a R& ,C& Unh tr0ng Unh nghha
&wa &C& thDnh phn &wa nx tr0ng -ut CoorSpace &b thT. [T vY -ut
Shape vi -ut -D!. &hng hen -D! . @en phWi tr!3"n -t Qi tRng&
Coor @I! (ikn -D! vi ngZ &Wnh h0e 2D. C010r R& inh nghha
tr0ng 0ava.a1t.Coor/ode -iI! tW -ut &C&h &b thT nhZng iT- R&
Cnh ,e ti &C& -D!.
Coor/ode `0& hE tiI! @iT! vi -ut i-ag' h0& -ut >u E- hnh
Wnhf>!66'ri-ag'g vD &!ng &]p thjng tin &n thiIt thv& hRp T @iT! (ikn
&C& gva trU I-. Coor/ode R& Unh nghha tr0ng 0ava.a1t.i"a$e
httpBOOtai1i'!ha3.&0-
1:2
Lp trnh ha trn Java 2D v 3D
>.1 *2c &p
C1a*'* D'*&ripti0n
C010r2pa&' $('nti6i'* th' &010r *pa&' 06 a C010r 0@N'&t+
$-ag'+ >!66'r'($-ag'+ 0r )raphi&*D'vi&'.
Ka* -'th0(* t0 tran*60r- @'t?''n .)> an(
C$%r| &010r *pa&'*.
$CCC010r2pa&' %,t'n(*B C010r2pa&'
.'pr'*'nt* ('vi&'Pin('p'n('nt an( ('vi&'P
('p'n('nt &010r *pa&'* @a*'( 0n th' $CC
Pr06i1' 80r-at 2p'&i6i&ati0n.
$CCPr06i1' # r'pr'*'ntati0n 06 &010r pr06i1' (ata 60r
('vi&' in('p'n('nt an( ('vi&' ('p'n('nt
&010r *pa&'* @a*'( 0n th' $CC Pr06i1'
80r-at 2p'&i6i&ati0n.
$CCPr06i1')ra3 %,t'n(*B $CCPr06i1'
# r'pr'*'ntati0n 06 &010r *pa&' t3p' gra3.
$CCPr06i1'.)> %,t'n(*B $CCPr06i1'
# r'pr'*'ntati0n 06 &010r *pa&' t3p' .)>.
>.2 BhNn" Inh n"hOa vC !9 sPc.
/ut Coor/ode R& *G (bng T @iT! (ikn -ut (Z 1iE! (iT- tr0ng
Wnh. [i"! nD3 @a0 g- &W Cnh ,e &C& thDnh phn tr0ng nhZng (Wif@an(*g
&wa -ut Wnh ti &C& thDnh phn &wa -ut ;hjng gian -D! &b thT. Sx &x thT
&ng @a0 hD- &W ,!]t &C& thDnh phn iT- tt -ut (Z 1iE! (iT- (xng gxi
ha3 nhn v" nhi"! thDnh phn tt -ut (Wi n @ng *G (bng &C& -t ne. vD
&h!3Tn (Z 1iE! iT- !a -ut @Wng tha- &hiJ!f100;!p ta@1'g
[T ,C& Unh R& giC trU -D! &wa -ut iT- &b thT tr0ng Wnh @en phWi
@iJt &C& - h0C thjng tin &h0 -\i iT-. Coor/ode 1iIn hE vi -ut Wnh
*Y xng gxi (Z 1iE! vD &C& phng tha& &n thiJt &h0 viE& &h!3Tn i giC
trU iT- ti vD tt &C& n vU thDnh phn -D!.
httpBOOtai1i'!ha3.&0-
1:5
Lp trnh ha trn Java 2D v 3D
Java 2DA #P$ &!ng &]p 2 &010r -0('1 va thI- vD0 &irectCoor
/ode vD indexCoor/ode R& Unh nghha tr0ng JDi 1.1 r'1'a*'.B
Co"ponentCoor/ode &0 thT giZ -ut CoorSpace ;hjng hen
&hJ vD -ut -Wng thDnh phn -D! ang vi CoorSpace. /0('1 nD3 &x thT
*G (bng T @iT! (ikn h! hJt &C& -0('1 -D! trJn h! hJt &C& 10ei ThiJt @U
h0ef)rphi&*D'vi&'* g.
PackedCoor/ode 1D 1p & *y &h0 &C& -0('1 @iT! (ikn giC trU
iT- @a0 g- &C& thDnh phn -D! nhng tr`& tiJp tr0ng &C& @it &wa -ut
iT- ng!3In.
PackedCoor/ode &haa &a& thjng tin gxi -j tW &C&h &C& thDnh phn
-D! vD a1pha R& ,!]t ra tt -ut ;Inh. [ir'&tC010r/0('1 tr0ng JDi 1.1
r'1'a*' 1a -ut Pa&;'(C010r/0('1.
3.%.( 8h`n$ $ian "u
[Qi tRng CoorSpace @iT! (ikn -ut hE thQng &h0 viE& Unh 1Rng
&C& -D!+ tiI! @iT! nh viE& *G (bng 5 giC trU *Q riIng @iEt.Xv (b .)>+
C/|i 1D &C& ;hjng gian -D!.fC010r2pa&'g.
/ut Qi tRng CoorSpace (_ng nh 1D th -ut &010r*pa&' ,C& Unh
;hjng gian -D! &b thT &wa Qi tng -D! h0& !a -ut Qi tRng
Coor/ode + &wa -ut i-a' + -ut Bufferedi"a$e+ h0& -ut
GraphicsConfi$uration. CoorSpace &!ng &]p &C& phng tha& &h!3Tn
i &C& -D! tr0ng ;hjng gian ,C& Unh ti vD tt .)> vD ti vD tt ;hjng
gian Ci%r|.
T]t &W Qi tRng CoorSpace phWi &x thT Cnh ,e -ut -D! tt ;hjng
gian @iT! (ikn *ang *.)> vD &h!3Tn i -ut -D! *.)> *ang ;hjng gian
@iT! (ikn -D! x. X -\i C010r &haa -ut Qi tRng CoorSpace t
tzng -inh h0& -& Unh. -\i C010r &ng &x thT &h!3Tn tt *.)>+ /\i
GraphicsConfi$uration (R& 1iIn hE vi -ut Qi tRng C010r2pa&' ;hi
&x R& 1iIn hE vi CoorSpace. /ut -D! R& ,C& Unh tr0ng @]t &a
httpBOOtai1i'!ha3.&0-
1:7
Lp trnh ha trn Java 2D v 3D
;hjng gian -D! nD0 &!ng &x thT hiTn thU R& @yi @]t &a thiJt @U nD0 @yi
viE& Cnh ,e nx ti *.)> nh -ut ;hjng gian -D! tr!ng gian.
CC& phng tha& R& (_ng &h0 !C trnh nD3 1D to(%2fg vD
fro+(%2fg+ to(%2 &h!3Tn -ut C010r tr0ng ;hjng gian -D! ti -ut -D!
tr0ng *.)> 6r0-.)> nhn -ut -D! tr0ng *.)> vD &h!3Tn nx *ang
;hjng gian -!
/& (_ viE& Cnh ,e !a *.)> 1!jn th`& hiEn nhng nx ;hjng 1!jn
1!jn 1a phCp tQt nh]t.
Xv (b. *.)> ;hjng thT @iT! (ikn -i -D! tr0ng &W giWi -D! Ci%r|.
SJ! -ut -D! `& ,C& Unh tr0ng -ut vDi ;hjng gian &x giWi ph
-D! ;hC& nha! hn *.)>
Th viE& *G (bng *.)> nh 1D -ut ;hjng gian tr!ng gian vD y x @U -]t
thjng tin. T giWi !3Jt v]n " nD3+ 1p CoorSpace &x thT Cnh ,e &C&
-D! ti vD tt ;hjng gian -D! ;hC& + nh Ci%r|r
CC& phng tha& t0Ci%r| vD 6r0-Ci%r| Cnh ,e giC trU -D! tt
;hjng gian -D! ti ;hjng gian ;hC& fCi%r|g. CC& phng tha& nD3 @
trR &h!3Tn i giZa hai ;hjng gian -D! @]t ; vi -t u vD &]p u &a0+
vi -ut C010r -ut 1&.T!3 nhiIn &ng hi vng rng &Di t Java 2D #P$
*' @ trR &h0 &h!3Tn i vi hiE! nVng &a0 (`a trIn hE thjng !Wn 1H
-D!+ tha0 tC& trIn t0Dn Wnh.f r'- C010rC0nv'rtMp tr0ng i-aging trang
:<g
Knh :P1 vD :P2 -inh h0e !C trnh tran*1ating -ut -D! R& ,C&
Unh tr0ng ;hjng gian -D! C/|i T hiTn thU trIn -Dn hnh .)>. Knh
:P1 @iT! (ikn -apping !a *.)>. Sh hnh -inh h0e+ *` &h!3Tn i &wa
-D! C/|i *ang -D! .)> ;hjng &hvnh ,C& @yi *` ;hjng tng ang
h0Dn t0Dn.
T]t nhiIn+ nhZng -D! R& *G (bng tr0ng &C& nD3 -ang tvnh &h]t
@iT! -inh h0e vD ;hjng &hvnh ,C&. ShZng iI- -D! *Y ;hjng R&
httpBOOtai1i'!ha3.&0-
1:9
Lp trnh ha trn Java 2D v 3D
Cnh ,e ng giZa &C& ;hjng gian -D! trt ;hi &x -ut *` &h!3Tn i ;hjng
gian ph_ hRp R& *G (bng.
Knh :P2 @iT! (ikn &_ng !C trnh *G (bng Ci%r| nh 1D ;hjng
gian -D! &h!3Tn i. ihi Ci%r| R& *G (bng+ -D! R& &h!3Tn !a
-ut &C&h ang ^n.
CoorSpace 1a th`& ra 1D -ut 1p trt! tRng. Java 2D #P$ &!ng &]p
*` &Di t iCCPr06i1' 1p (`a trIn (Z 1iE! iCC Pr06i1' nh R& @iT!
(ikn @yi 1p iCCPr06i1'. >en &x thT Unh nghha 1p &0n &wa @en T @iT!
(ikn &C& ;hjng gian -D! &h!3Tn i -ikn 1D &C& phng tha& R& thW0
1!n trIn R& &Di t. T!3 nhiIn h! hJt &C& ('v'10p'r* &x thT *G (bng
-ut &C&h n giWn 1p CoorSpace -& Unh h0& &C& ;hjng gian -D!
R& @iT! (ikn @yi &C& iCC Pr06i1'* thjng thzng+ giQng nh &C& thjng
tin &h0 -Dn hnh vD -C3 in+ h0& thjng tin R& nhang tr0ng (Z 1iE! Wnh.
CoorSpace tr0ng trang 90 -iI! tW &C&h Qi tRng CoorSpace @iT!
(ikn -ut ;hjng gian -D! vD @iT! (ikn &C& -D! tr0ng ;hjng gian -D! &x
thT Cnh ,e ti vD tt -ut ;hjng gian &h!3Tn i. CC& hE thQng !Wn 1H
-D! thzng R& *G (bng T giZ Cnh ,e giZa &C& ;hjng gian -D!. TiI!
httpBOOtai1i'!ha3.&0-
1::
Lp trnh ha trn Java 2D v 3D
@iT! nh hE thjng !Wn 1H -D! fC/2g !Wn 1H &C& thjng tin iCC fiCC
pr06i1'*g nx gijng nh Qi tRng C010r2pa&' iCC pr06i1'* -j tW -ut
;hjng gian vD0 vD ;hjng gian ;Jt nQi+ vD Unh nghha &C&h Cnh ,e giZ
&hng. KE thQng !Wn 1H -D! r]t tQt y viE& &h ra &C&h Cnh ,e -ut -D!
R& g^n vi -ut pr06i1' vD0 tr0ng ;hjng gian -D! &wa -ut pr06i1' ;hC&.
Java 2D #P$ Unh nghha -ut 1p gi 1D iCCPr06i1' giZ (Z 1iE! &h0
-ut @u &h!3Tn i iCC pr06i1'. iCCC010r2pa&' 1D -ut *` &Di t &wa 1p
trt! tRng C010r2pa&'. CC& Qi tRng iCCC010r2pa&' &x thT R& ;hyi
te0 tt &C& iCCPr06i1'.fCx -ut *Q gii hen ;hjng phWi t]t &W &C& iCC
Pr06i1' 1D thv&h hRp &h0 viE& Unh nghha -ut
iCCC010r2pa&'giCCPr06i1' &x vDi 1p &0n tng ang vi &C& 10ei
;hjng gian -D! nh iCCPr06i1'.)> vD iCCPr06i1')ra3. /\i 1p &0n
&wa nx &x -ut ;hjng gian vD0 R& Unh nghha thv&h hRpfgijng nh
;hjng gian .)>g vD ;hjng gian ;Jt nQi thv&h hRp f;hjng gian Ci%r|g.
Java 2D #P$ &x thT *G (bng hE thjng n"n C/2 fp1at60r-* C/2 g T tr!3
nhp &C& thjng tin -D! &0 nhi"! 10ei thiJt @U a (eng gijng nh
*&ann'r +-C3 in+ -Dn hnh. Cng &x thT *G (bng C/2 T t- *` Cnh ,e
tQt nh]t giZa &C& pr06i1'*
3.%.( BiQu dian "u
Lp Coor &!ng &]p *` -j tW -D! tr0ng ;hjng gian -D! &b thT. -ut
thT nghiE- &wa Coor &haa giC trU &C& thDnh phn -D! vD -ut Qi tRng
CoorSpace. >yi -ut Qi tRng C010r2pa&' &x thT R& ,C& Unh thI-
vD0 &C& thDnh phn -D! ;hi -ut thT nghiE- -i &wa -D R& te0 ra nIn
1p Coor &x thT giZ &C& -D! tr0ng @]t &a ;hjng gian -D! nD0.
Lp Coor &x -ut *Q phng tha& @ trR &h0 ;hjng gian -D! &h!n
.)> R& gi 1D *.)>ftha- ;hW0 httpBOO ???. L5.
0rgOp!@O???O)raphi&*O&010rO*.)>.ht-1g. *.)> 1a ;hjng gian -D! -&
Unh &h0 Java 2D #P$. Xai hD- ;hyi te0 R& Unh nghha @yi 1p Coor
httpBOOtai1i'!ha3.&0-
1:<
Lp trnh ha trn Java 2D v 3D
&h0 phcp @ !a tha- *Q CoorSpace. CC& ;hyi te0 nD3 -& Unh rng
giC trU -D! .)> R& Unh nghha tr0ng *.)>+ vD *G (bng thT nghiE-
-& Unh &wa CoorSpace T @iT! (ikn &h0 ;hjng gian x.
Java 2D #P$ (_ng *.)> te0 th!n 1i &h0 &C& 1p trnh viIn 1p trnh
ang (bng+ ;hjng phWi 1D tha- &hiJ! ;hjng gian -D! &h0 *` &h!3Tn i
-D!. Shi"! ang (bng &hw 3J! tp tr!ng vD0 anh .)> vD -Dn hnh vD viE&
Unh nghha ;hjng gian -D! .)> 1a- &h0 viE& viJt &hng (k (Dng hn.
Lxp C010r2pa&' Unh nghha &C& phng tha& to(%2 vD fr]+%2 1D- &h0
&C& ('v'10p'r* &x thT nhn &C& -D! -ut &C&h k (Dng tr0ng ;hjng gian
&h!n nD3. CC& phng tha& nD3 ;hjng -0ng Ri *G (bng &h0 -D! vi u
&hvnh ,C& &a0 ha3 viE& &h!3Tn i. f,'- C010r2pa&' trang 90 g
[T te0 ra -ut -D! f&010rg tr0ng -ut ;hjng gian -D! ;hjng phWi 1D *.)>+
@an (_ng hD- te0 Coor vi Qi tRng CoorSpace vD -ut -Wng *0 th`&
@iT! (ikn &C& thDnh phn -D! tng ang vi ;hjng gian x. [Qi tRng
CoorSpace ,C& Unh ;hjng gian -D!.
[T hiTn thU -ut hnh &hZ nht ng -D! giQng nh -D! &3an+ @en
&n -ut &C&h T -j tW -D! nD3 &h0 hE thQng. Cx -ut *Q &C&h ;hC& nha!
T -j tW -ut -D!+ vv (b -ut -D! &x thT R& -j tW @ng -ut tp hRp
&C& thDnh phn f.)>g fr'(g+ ,anh 1C &s3fgr''ng+ ,anh (a trzif@1!'g ha3
tp hRp &C& thDnh phnfC/|ig C3an+ /ag'nta+ |'110?+ >1a&; . CC& ;
th!t ;hC& nha! nD3 &h0 viE& ,C& Unh -D! R& gi 1D &C& ;hjng gian
-D! f&010r *pa&'*g.
Sh @en @iJt+ &C& -D! trIn -ut -Dn hnh -C3 tnh R& te0 @yi *` pha
trun 1Rng ;hC& nha! &wa @a thDnh phn f.'(g+ ,anh 1C &s3 f)r''ng+ ,anh
(a trzi f>1!'g. X thJ nIn (_ng ;hjng gian -D! .)> 1D- &h!n &h0 vY Wnh
trIn -an hnh -C3 tvnh. Tng t`+ !C trnh in 7 -D! (_ng &3an+ -ag'nta+
3'110?+ @1a&; T te0 ra -D! trIn trang gis3 in +&C& -D! in R& ,C& Unh
@ng t 1E phn trV- tr0ng ;hjng gian -D! C/|i.
httpBOOtai1i'!ha3.&0-
1:=
Lp trnh ha trn Java 2D v 3D
[T thv&h hRp vi *` ph @iJn &wa &W -Dn hnh vD -C3 in -D!+ &W hai
;hjng gian -D! .)> vD C/|i R& (_ng T @iT! (ikn -D!. T!3 nhiIn+
&W 2 10ei ;hjng gian -D! &x -ut hen &hJ 1D phb th!u& thiJt @U. -`& &-
the&hf&3ang R& *G (bng @yi -ut -C3 in &x thT ;hjng tng ang vi
-`& &3an &wa -ut -C3 in ;hC&. Tng t`+ -ut -D! @iT! (ikn @ng -ut
-D! .)> &x thT trjng gijng -D! ,anh (a trzi f@1!'g trIn -ut -Dn hnh
vD -D! tva fp!rp1i*hg trIn -ut -Dn hnh ;hC& .
%apping Colors Eua s20K vH Ci,OPQ
Java 2D #P$ (_ng .)> vD C/|i 1a 2 10ei ;hjng gian -D!. /ut
-0('1 -Dn hnh phjt ph0 &b thT ,C& Unh -ut ;hjng gian -D! .)> &wa
nx. Tng t`+ -jt -0('1 -C3 in &ng &x ;hjng gian C/|i &wa nx.
ihjng gian ;hC& nha! + ihjng gian .)> h0& ;hjng gian C/|i &x thT
1iIn hE vi nha! !a ;hjng -D! gian u& 1p thiJt @U
CC& &h!n &h0 viE& ,C& inh -D! u& 1p thiJt @U R& Unh nghha
@yi int'rnati0na1 C0--i**i0n 0n i11!-inati0n fCi%g. ihjng gian -D! u&
1p thiJt @U thzng `& (_ng nh]t 1D ;hjng gian 5 thDnh phn -D!
fthr''P&0-p0n'nt r| g R& phCt triTn @yi Ci%. ihi @en ,C& Unh -ut
-D! (_ng Ci%r|+ @en R& &C&h 13 vi u& 1p thiJt @U.
Tht ;hjng -a3 -^n+ ;hjng phWi 1& nD0 &ng (_ng ;hjng gian -D!
Ci%r|+ &x -ut *Q 1H (0 &h0 viE& @iT! (ikn -D! tr0ng &C& ;hjng gian
-D! ;hC&. [T et R& ;Jt !W n Unh ;hi -ut -D! `& @iT! (ikn (!ng
;hjng gian phb th!u& thiJt @U nh ;hjng gian .)>+ &n @iT! (ikn &hC&
;hjng gian .)> 1iIn hE v ;hjng gian u& 1p thiJt @U giQng nh
Ci%r|.
/ut &C&h T Cnh ,e giZa &C& ;hjng gian -D! 1D thI- thjng tin vD0
&C&h ;hjng gian phb th!u& thiJt @U 1iIn hE vi ;hjng gian u& 1p thiJt @U.
ShZng thjng tin thI- nD3 R& gi 1D pr06i1'. C010r pr06i1' thzng *G
(bng 1D iCC C010r Pr06i1'+ R& Unh nghha @yi int'rnati0na1 C010r
httpBOOtai1i'!ha3.&0-
1:9
Lp trnh ha trn Java 2D v 3D
C0n*0rti!-. Chi tiJt ,'- iCC C010r 80r-at 2p'&i6i&ati0n+ phiIn @Wn 5.7
trIn trang httpBOO ???.&010r. Mrg.
Knh :P5 -inh h0e -ut -D! n f201i( &010rg vD -ut Wnh !ct R&
tr!3"n &h0 Java 2D #P$ vD &C&h &hng hiTn thU @yi &C& thiJt @U ra a (eng.
Sh @en th]3 tr0ng :P5 &W -D! vD0 vD Wnh &x &C& pr06i1' R& g^n vD0.
ihi #P$ &x -ut -D! ,C& Unh -ut &C&h &hvnh ,C&+ nx phWi te0 1ei -D!
trIn thiJt @U ra+ nh -Dn hnh vD -C3 in. CC& thiJt @U nD3 &x &C& & tvnh
te0 Wnh &wa nx W- @W0 rng ;Jt !W te0 ra 1D &hvnh ,C&. /ut pr06i1' R&
1iIn ;Jt vi -\i thiJt @U ra T -j tW &C&h &C& -D! &n R& &h!3Tn i T
te0 ra ;Jt !W &hvnh ,C&.
XiE& et R& -D! n Unh vD &hvnh ,C& 3I! &! &W -D! vD0 vD thiJt
@U ra a thI- thjng tin try 1ei &h0 ;hjng gian -D! &h!n. Xv (b+ -ut
-D! vD0 &x thT Cnh ,e tt ;hjng gian -D! gQ& &wa nx *ang ;hjng gian
-D! u& 1p thiJt @U &h!n+ vD *a! x tt ;hjng gian x *ang ;hjng gian
-D! thiJt @U ra. Tr0ng nhi"! ;hva &enh+ *` &h!3Tn i -D! @^t &h& *`
&h!3Tn i &wa Qi tRng h0e tr0ng ;hjng gian t0e u ,+ 3. CW 2
trzng hRp+ *` &h!3Tn i R& (_ng T ,C& Unh t0e u tr0ng ;hjng gian
httpBOOtai1i'!ha3.&0-
1<0
Lp trnh ha trn Java 2D v 3D
&h!n vD *a! x Cnh ,e t0e u x *ang ;hjng gian thiJt @U ,C& Unh &h0
! ra.
Chng 9
In :n
Java Printing #P$ &h0 phcp ang (bng &h0B
1. $n vi #LT vD h0e Java 2DA + @a0 g- h0e a hRp
f&0-p0*it'( graphi&*g vD hnh Wnh.
2. CC& hD- i"! ;hiTn &C& hD- tDi 1iE! a hRp nh *0 *Cnh -"-+
tha t` in+ vD @00;1't printing.
5. CC& hD- in ,C& Unh trR gip nh in (!p1', f(!p1', printingg
vD *tap1ing.
7. $n vi t]t &W &C& p1at60r-+ &W Lin(0?* vD 201ari*. [i"! nD3 @a0
g- -C3 in R& g^n tr`& tiJp vi -C3 tvnh &ng nh vi
p1at60r- *06t?ar' &h0 phcp tr!3 &p *G (bng &C& gia0 tha& in
!a -eng.
ihjng phWi t]t &W &C& tvnh nVng x R& @ trR vD R& &Di t tr0ng
in ]n vi JavaA 2 2Di #P$. Shng #P$ *Y R& -y rung T @u trR &h0
t]t &W &C& th!u& tvnh nD3 y &C& @Wn r'1'a*' tr0ng tng 1ai.
L.1 *2c "ia% di4n v3 c2c &p
httpBOOtai1i'!ha3.&0-
1<1
Lp trnh ha trn Java 2D v 3D
.nterface &escription
Printa@1' Th' Printa@1' int'r6a&' i* i-p1'-'nt'( @3 'a&h pag'
paint'r+ th' app1i&ati0n &1a**f'*g &a11'( @3 th'
printing *3*t'- t0 r'n('r a pag'. Th' *3*t'- &a11* th'
pag' paint'r* print -'th0( t0 r'!'*t that a pag' @'
r'n('r'(.
Pag'a@1' Th' Pag'a@1' int'r6a&' i* i-p1'-'nt'( @3 a
(0&!-'nt that i* t0 @' print'( @3 th' printing *3*t'-.
Thr0!gh th' Pag'a@1' -'th0(*+ th' *3*t'- &an
('t'r-in' th' n!-@'r 06 pag'* in th' (0&!-'nt+ th'
60r-at t0 !*' 60r 'a&h pag'+ an( th' pag' paint'r t0
!*' t0 r'n('r 'a&h pag'.
Print'r)raphi&* Th' )raphi&*2D 0@N'&t* that a pag' paint'r !*'* t0
r'n('r a pag' i-p1'-'nt th' Print'r)raphi&*
int'r6a&'. Thi* 'na@1'* an app1i&ati0n t0 g't th'
Print'rJ0@ 0@N'&t that i* &0ntr011ing th' printing.
Printa@1' Th' Printa@1' int'r6a&' i* i-p1'-'nt'( @3 'a&h pag'
paint'r+ th' app1i&ati0n &1a**f'*g &a11'( @3 th'
printing *3*t'- t0 r'n('r a pag'. Th' *3*t'- &a11* th'
pag' paint'r* print -'th0( t0 r'!'*t that a pag' @'
r'n('r'(.
Cass &escription
>00; $-p1'-'nt*B Pag'a@1'
.'pr'*'nt* a (0&!-'nt in ?hi&h pag'* &an hav'
(i66'r'nt pag'
60r-at* an( pag' paint'r*. Thi* &1a** !*'* th'
Pag'a@1'
int'r6a&' t0 int'ra&t ?ith a Print'rJ0@.
Pag'80r-at D'*&ri@'* th' *i' an( 0ri'ntati0n 06 a pag' t0 @'
httpBOOtai1i'!ha3.&0-
1<2
Lp trnh ha trn Java 2D v 3D
print'(+ a*
?'11 a* th' Pap'r !*'( t0 print it. 80r ',a-p1'+
p0rtrait
an( 1an(*&ap' pap'r 0ri'ntati0n* ar' r'pP r'*'nt'( @3
Pag'80r-at.
Pap'r D'*&ri@'* th' ph3*i&a1 &hara&t'ri*ti&* 06 a pi'&' 06
pap'r.
Print'rJ0@ Th' prin&ipa1 &1a** that &0ntr01* printing. Th'
app1i&ati0n &a11* Print'rJ0@ -'th0(* t0 *'t !p a N0@+
(i*p1a3 a print (ia10g t0 th' !*'r f0pti0na1g+ an( t0
print th' pag'* in th' N0@.
CMc Hnh n$h9a v\ in
Java Printing #P$ (`a trIn -j hnh in &a11@a&; tr0ng x hE thjng in+
;hjng phWi ng (bng *Y i"! ;hiTn ;hi &C& trang R& in. ng (bng &!ng
&]p thjng tin v" tDi 1iE! R& in vD hE thQng in *Y 3I! &! ang (bng 3
ti &C& trang in ;hi nx &n &hng.
KE thQng in &x thT 3I! &! rng -ut trang in riIng @iEt R& a ra
hn -ut 1n h0& 3I! &! &C& trang R& a ra ng0Di th'0 tha t`. ng
(bng phWi &h0 phcp te0 ra hnh Wnh ng &wa trang+ ;hjng phb th!u&
trang nD0 hE thQng in 3I! &!. Tr0ng ;hva &enh x+ hE thQng in gijng nh
?in(0? t001;it+ &x thT 3I! &! &C& thDnh phn T vY 1ei @st & 1& nD0
tr0ng tha t` nD0.
/j hnh in &a11@a&; -"- (0 hn &C& -j hnh ang (bng i"! ;hiTn in
tr!3"n thQng vD @ trR &h0 viE& in trIn (Wi rung hn &C& hE thQng vD &C&
-C3 in.
httpBOOtai1i'!ha3.&0-
1<5
Lp trnh ha trn Java 2D v 3D
Xv (b+ nJ! -ut -C3 in th`& hiEn a ra &C& trang tr0ng tha t` W0 ngR&+
hE thQng in &x thT 3I! &! ang (bng te0 &C& trang tr0ng tha t` W0 ngR&
*a0 &h0 tC& vb &!Qi &_ng 1D ng tha t` & .
/j hnh nD3 &ng &h0 phcp ang (bng T in ra &C& -C3 in Wnh nhU
phsn tt -C3 tvnh -D ;hjng &x w @u nh hD3 ;hjng gian ha T E- &h0
t0Dn trang @it-ap. Tr0ng tnh h!Qng nD3+ -ut trang R& in nh 1D -ut
(3 &C @it-ap nh ha3 &C& (Wi f@an(*g. Xv (b+ n"! @u nh &h w E- &h0
1O10 trang in+ thi trang *Y R& &h thDnh 10 (Wi. KE thQng in di hi ang
(bng 3 -\i trang 10 1n+ -\i 1n i"n vD0 -\i (Wi. ng (bng ;hjng
&n @iJt *Q 1Rng ha3 & &wa &C& (Wi+ nx &h n giWn ;hW 3 -\i trang
;hi R& 3I! &!.
?.%.( Supportin$ Printin$
/ut ang (bng phWi th`& hiEn 2 tC& v! T @ trR &h0 viE& in 1DB
1. [i"! ;hiTn infJ0@ &0ntr01gP ihyi te0 vD !Wn 1H viE& in.
2. $n fi-agingg [3 fr'n('ringg (Z 1iE! ra -\i trang ;hi hE thQng in
3I! &! nx
$.2.1.1 =iRu )hi9n in B+o4 ControlC
Sgzi *G (bng thzng ;hyi te0 viE& in @yi viE& ;v&h -ut nt h0&
&hn -b& in trIn -'n! tr0ng -ut ang (bng. ihi -ut tha0 tC& in R&
;v&h h0et @yi ngzi *G (bng+ ang (bng te0 ra -ut Qi tRng Printer>o,
vD (_ng nx T !Wn 1H !C trnh in.
ng (bng &x ;hW nVng Cp ang &h0 viE& &Di t i"! ;hiTn in+ hiTn thU
&C& hup th0ei &h0 ngzi *G (bng+ vD @^t ! !C trnh in.
i-aging
ihi -ut tDi 1iE! R& in+ ang (bng phWi 3 (Z 1iE! -\i trang ;hi hE
thQng in 3I! &! nx. [T @ trR &h0 ; th!t nD3+ ang (bng &!ng &]p -ut
httpBOOtai1i'!ha3.&0-
1<7
Lp trnh ha trn Java 2D v 3D
pag' paint'r &Di t gia0 (iEn Printa,e. ihi hE thQng in &n -ut trang
R& s3 ra+ nx gi phng tha& in &wa pag' paint'r.
ihi -ut phng tha& &wa pag' paint'r R& gi+ nx R& tr!3"n &h0
-ut ngZ &Wnh h0e f)raphi&* &0nt',tg (_ng T 3 hnh anh trang. Sx
&ng R& tr!3"n &h0 -ut Qi tRng Pa$e+or"at ,C& Unh f*p'&i6i'*g
hnh hiEn ra &wa trang+ vD &h *Q ,C& Unh tha t` vU trv &wa trang tr0ng viE&
in.
KE thQng in h\ trR &W viE& 3 Graphics vD Graphics%&+ T in Java
2DA 2hap'* +T',t vD i-ag'*+ @en a -ut Qi tRng Graphics &h0
phng tha& in &h0 raphics%&
[T in &C& tDi 1iE! tr0ng x &C& trang (_ng &C& pag' paint'r ;hC& nha!
vD &x &C& Unh (eng ;hC& nha!+ @en (_ng -ut pa$ea,e0o,. [T te0 -ut
pag'a@1' N0@+ @en &x thT (_ng 1p >00; h0& &Di t gia0 (iEn Pa$ea,e
&wa @en.
[T &Di t &C& tha0 tC& in n giWn+ @en ;hjng &n (_ng -ut pag'a@1'
print N0@+ PrintP a@1' &x thT R& (_ng -ikn 1D t]t &W &C& trang &hia * &_n
-ut Unh (eng vD -ut -C3 in
?.%.% Pa$e Painters
XiE& &hw 3J! &wa -ut pag' paint'r 1D 3 ra -ut trang (_ng ngZ &Wnh
h0e R& &!ng &]p @yi hE thQng in. /ut pag' paint'r &Di t ph0ng
tha& Printa,e.printB
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
SgZ &Wnh h0e R& tr!3"n &h0 phng tha& in 1D -ut thT nghiE-
&wa )raphi&* h0& Graphics%&+ phb th!u& vD0 &C& pa&;ag' R& 10a(
tr0ng Java Xt!a1 /a&hin' &wa @en. [T (_ng &C& tvnh nVng Graphics%& +
httpBOOtai1i'!ha3.&0-
1<9
Lp trnh ha trn Java 2D v 3D
@en &x thT tha3 Qi tRng Graphics @ng Graphics%&. ThT nghiE-
Graphics R& tr!3"n T in &ng &Di t gia0 (iEn PrinterGraphics.
Pa$e+or"at R& tr!3"n &h0 -ut Printa,e -j tW hnh Wnh &wa -ut
trang R& in. KE ta u &wa ngZ &Wnh h0e R& tr!3"n T in R&
6i,'( vi trang B gQ& t0e u &wa hE thQng 1D gx& trCi trIn &wa trang+ r tVng
th'0 &hi"! phWi *ang trCi+ | th'0 &hi"! tt trIn ,Qng (i+ vi n v 1D
1O<2 in&h.
SJ! trang tr0ng hng p0rtrait+ trb& , &Vn th'0 &hi"! rung &wa trang gi]3+
vD trb& 3 th'0 &hi"! &a0 &wa trang. fThjng thzng+ nhng ;hjng phWi
1!jn 1!jn+ &hi"! &a0 &wa trang (Di hn vi &hi"! rung &wa nxg. SJ! trang
th'0 hng 1an(*&ap'+ th ngR& 1eiB trb& , &Vn th'0 &hi"! &a0 &wa trang
&dn trb& 3 &Vn th'0 &hi"! rung &wa nx.
>yi nhi"! -C3 in ;hjng thT trIn &W @" -t trang+ Pa$e+or"at ,C&
Unh f*p'&i6i'*g v_ng in fi-ag'a@1' ar'ag &wa trangB phn &wa trang -D nx
3 ra an t0Dn. 2` ,C& Unh &wa v_ng in ;hjng tha3 i th'0 t0e u hE
thQng+ nx R& &!ng &]p *a0 &h0 nui (!ng &wa trang &x thT R& 3 ra
*a0 &h0 &hng ;hjng thT -y rjng vD0 tr0ng v!ng -D -C3 in ;hjng thT
in.
SgZ &Wnh h0e R& tr!3"n T in &x -ut -i"n ,cn -j tW phn -i"n
&x thT in -D &n R& in. Sx &ng 1!jn an t0Dn T in t0Dn @u trang vD0
tr0ng ngZ &Wnh x+ hE thQng in *Y n^- (Z v_ng ,cn &n thiJt.
T!3 nhiIn+ T 10ei 0v'rh'a( &wa &C& phn vY &wa trang ;hjng R& in+
@en &x thT (_ng -i"n &^t ,cn T gii hen v_ng 3 ra. [T 1]3 v_ng &^t
,cn tt ngZ &Wnh h0e+ gi hD- Graphics.get)lip. X_ng &^t ,cn r]t
-enh -Y T giW- @t r'n('ring 0v'rh'a(.
[ji ;hi -0ng -!Qn &W tha0 tC& in th`& hiEn ng- T &h0 ngzi (_ng
&x thT tiJp tb& ta0 tC& vxi ng (bng tr0ng ;hi &C& trang ang R& 3 ra
fang ing. [T 1D- i"! nD3+ gi hD- Print'rJ0@.print tr0ng -ut t!3Jn
riIng.
httpBOOtai1i'!ha3.&0-
1<:
Lp trnh ha trn Java 2D v 3D
SJ! &x thT+ @en nIn trCnh &C& tha0 tC& h0e -D 3I! &! thjng tin v"
nui (!ng &wa i-ag' tr& x+ giQng nh &opy$rea+ set^'(+ vD *` 1iIn
hRp f&0-p0*itingg.
CC& tha0 tC& nD3 &x thT 3 ra &h- vD &C& ;Jt !W &x thT ;hjng n
Unh.
?.%.* Printa,e >o,s and Pa$ea,e >o,s
/ut Printa,e N0@ &!ng &]p &C&h n giWn nh]t T in. Ch -ut pag'
paint'r R& (_ng + ang (bng &!ng &]p -ut 1p n &Di t gia0 (iEn
Printa@1'. ihi in+ hE thQng g0i phng tha& in &wa pag' paint'r T 3 ra
-\i trang. CC& trang R& 3I! &! th'0 tha t`+ @^t ! vi trang &x &h *Q
1D 0. T!3 nhiIn+ pag' paint'r &x thT R& 3I! &! T 3 -\i trang vDi 1n
tr& ;hi nx *ang trang tiJp. ihi trang &!Qi &_ng R& in+ phng tha& in
&wa pag' paint'r trW v" SM24CKP#)%.
Tr0ng -ut Printa,e N0@B
1. T]t &W &C& trang (_ng &!ng -ut pag' paint'r vD Pa$e+or"at. SJ!
-ut hup th0ei in R& hiTn thU+ nx &ng *Y ;hjng hiTn thU *Q trang
tr0ng tDi 1iE! v thjng tin x ;hjng &x vi hE thQng in.
2. KE thQng in 1!jn di hi pag' paint'r T in -\i trang ng tha t`+
@^t ! vi trang &x &h *Q 1D 0. ihjng trang nD0 @U !In. Xv (b+
nJ! ngzi (_ng 3I! &! in trang 2 vD trang 5 &wa -ut tDi 1iE!+ th
pag' paint'r *Y R& gi vi &C& &h *Q 0+ 1+ 2. KE thQng in &x thT
3I! &! -ut trang R& 3 ra nhi"! 1n tr& ;hi &h!3Tn *ang
trang ;J.
5. Pag' paint'r @C0 &h0 hE thQng in ;hi nx Jn &!Qi tDi 1iE!.
7. T]t &W &C& pag' paint'r R& gi tr0ng &_ng -ut t!3Jn.
9. [ji ;hi hE thQng in &x thT ;hjng &x ;hW nVng @iJt R& -b& v&h
a ra. Xv (b+ tC& vb &wa &C& trang hiEn ra tt -C3 in &x thT 1D tha t`
httpBOOtai1i'!ha3.&0-
1<<
Lp trnh ha trn Java 2D v 3D
*ai+ h0& &C& trang &x thT ;hjng R& ;iT- tra tha t` nJ! nhi"! @Wn
*a0 R& 3I! &!.
:. /ut Pag'a@1' N0@ 1inh h0et hn -ut Printa@1' N0@. ihjng giQng
nh &C& trang tr0ng Printa@1' N0@+ &C& trang tr0ng Pag'a@1' N0@ &x
thT ;hC& v" &C&h @Q trv vD &Di t.
[T !Wn 1H -ut Pag'a@1' N0@+ @en &x thT (_ng 1p >00; ha3 &Di t
1p Pa$ea,e &wa @en. F!a Pa$ea,e+ hE thQng in &x thT ,C& Unh *Q
1Rng trang T in+ vD pag' paint'r (_ng &h0 -\i trang+ vD Pa$e+or"at
&h0 -\i trang. CC& ang (bng &n in &C& tDi 1iE! &x -ut &]! tr& Unh vD
Unh (eng nIn (_ng &C& Pag'a@1' N0@.
Tr0ng -ut Pag'a@1' N0@B
CC& trang ;hC& nha! &x thT (_ng &C& pag' paint'r vD &C&
Pa$e+or"at ;hC& nha!.
KE thQng in &x thT di hi &C& pag' paint'r T in &C& trang tr0ng
-ut tha t` t! H vD -ut trang &x thT R& @ !a. Xv (b+ SJ! ngzi (_ng
3I! &! in &C& trang 2 vD 5 &wa -ut tDi 1iE!+ th pag' paint'r *' R& gi
vi &h *Q 1 vD 2 &dn trang &h *Q 0 *Y R& @ !a.
Pag'a@1' N0@ ;hjng &n @iJt &x @a0 nhiI! trang tiJp th'0 tr0ng tDi
1iE!. T!3 nhiIn+ ;hjng giQng vi Printa@1' N0@+ &hng phWi &x ;hW nVng
3 ra &C& trang tr0ng @]t ; tha t`. Cx thT &x &C& &h\ trQng tr0ng tha t`
vD hE thQng in &x thT 3I! &! -ut trang R& 3 ra nhi"! 1n tr& ;hi
&h!3Tn *ang trang tiJp th'0. Xv (b+ 3I! &! T in trang 2 vD 5 &wa -ut tDi
1iE! &x thT ;Jt !W tr0ng (3 1zi gi 1D &C& trang 3I! &! vi &h *Q 2+ 2+ 1+
1 vD 1.
9;2;) T<pia= >i?e@C<=e .? a PrinterJ.1
/ut ang (bng hng th'0 Qi tRng Printer>o, !a -ut (3 &C&
@& T h0Dn thDnh &jng viE& in. Tha t` n giWn nh]t R& (_ng @yi
ang (bng 1DB
httpBOOtai1i'!ha3.&0-
1<=
Lp trnh ha trn Java 2D v 3D
L]3 -ut Qi tRng Printer>o, -i @yi viE& gi
Printer>o,.get!rintJo3
rC& Unh Pa$e+or"at T (_ng &h0 viE& in. /ut Pa$e+or"at -&
Unh &x thT 1]3 v" @yi gi hD- default!age. h0& @en &x thT gi
-ut hup th0ei &h0 phcp ngzi (_ng ,C& Unh Unh (eng .
rC& Unh &C& & iT- &wa &jng viE& T in &h0 Print'rJ0@. Ch0
-ut Printa@1' N0@+ gi set!rinta3le vi Pag'a@1' N0@+ gi
set!agea3le. Ch H -ut Qi tRng >00; 1D -ut -! tr!3"n &h0
set!agea3le.
rC& Unh &C& th!u& tvnh thI- &h0 viE& in+ giQng nh *Q @Wn *a0 T
in ha3 tIn &wa &jng viE& trIn ! " trang.
)i hD- printDialog T hiTn thU hup th0ei &h0 ngzi (_ng. [i"! nD3
1D t! &hn. ShZng nui (!ng vD hnh (eng &wa hup th0ei &x thT a
(eng vi &C& p1at60r- vD &C& -C3 in ;hC& nha!. TrIn h! hJt &C&
p1at60r-+ ngzi (_ng &x thT (_ng hup th0ei nD3 T tha3 i &C& 1`a
&hn &wa -C3 in. SJ! ngzi (_ng h! viE& in+ phng tha&
printDia10g trW v" 8#L2%.
)i Printer0o,.print T in. Phng tha& nD3 ;hi trW v" gi print
trIn &C& pag' paint'r tng ang.
/ut &jng viE& &x thT @U ng^t !C trnh in nJ!B
/ut Printer)xception R& a vD0 ng0ei 1E R& @^t @0i
phng tha& in vD &jng viE& *Y @U (tng. /ut pag' paint'r a ra
-ut Print'r%,&'pti0n nJ! nx phCt hiEn -ut tr- trng 1\i f6ata1
'rr0rg.
Printer>o,.&an&el R& gi. vdng 1p in *Y @U &h]- (at vD &jng
viE& @U h! @. Phng tha& &an&'1 &x thT R& gi tt -ut t!3Jn
riIng @iEt &Ci hiTn thU -ut hup th0ei vD &h0 phcp ngzi (_ng hw3
@ viE& in @yi @]- vD0 -ut nt trIn hup th0ei x.
httpBOOtai1i'!ha3.&0-
1<9
Lp trnh ha trn Java 2D v 3D
CC& trang phsn ra tr& ;hi -ut &jng viE& in @U (tng &x thT 1D ;hjng
R& in h0& R& in. XiE& in thzng ;hjng ;It th& f6ini*h'(g ;hi
phng tha& in tra v". XiE& nD3 thzng vn ang R& th`& hiEn @yi trnh
i"! ;hiJn -C3 in.
Treng thCi &wa Qi tRng Printer>o, &x thT ;hjng phWn Cnh treng thCi
th`& tJ &wa &jng viE& ang R& in.
D0 treng thCi &wa -ut Printer>o, tha3 i tr0ng !C trnh vdng zi
&wa nx. ihjng hRp 1H 3I! &! &C& phng tha& vD0 nhi"! 1&. Xv (b+ viE&
gi set!agea3le *a! ;hi @en gi hD- print 1D ;hjng hRp 1H. ihi &x &C&
1zi gi ;hjng hRp 1H R& phCt hiEn Printer>o, *Y a vD0 -ut ng0ei 1E
0ava.an$.ie$aStat)xception.
Dia10g*
Java Printing #P$ 3I! &! &C& ang (bng &n Jn hup th0ei gia0 tiJp
vi ngzi (_ng -ut &C&h tzng -inh. CC& hup th0ei nD3 &x thT R&
&!ng &]p @yi hE i"! hDnh fp1at60r- *06t?ar'g h0& @yi *` &Di t phn
-"- JavaA 2 2Di . Xi &C& ang (bng tng tC&+ nIn (_ng hup th0ei.
T!3 nhiIn+ &C& ang (bng in ;Jt wafpr0(!&ti0n printing app1i&ati0ng+ &C&
hup th0ei ;hjng &n thiJt+ vv (b nh+ @en ;hjng &n hiTn thU hup th0ei ;hi
t` ung te0 vD in -ut @C0 &C0 & *y (Z 1iE!. /ut viE& in ;hjng 3I! &!
tng tC& vi ngzi (_ng ji ;hi R& gi 1D *i1'nt print N0@.
-age setup 'ialog
>en &x thT &h0 phcp ngzi (!ng tha3 i thjng tin &Di t trangfpag'
*'t!p in60r-ati0ng &haa tr0ng Pa$e+or"at @yi hiTn thU hup th0ei pag'
*'t!p. [T hiTn thU -ut hup th0ei pag' *'t!p @en gi hD-
Printer>o,.pa$e&iao$. Kup th0ei pag' *'t!p R& ;hyi te0 (_ng tha-
*Q tr!3"n &h0 pageDialog. SJ! ngzi (_ng &1i&; vD0 nt Mi tr0ng hup
th0ei+ thU -ut thT nghiE- &wa Pag'80r-at R& te0f&10n'(g+ vD tha3 i
httpBOOtai1i'!ha3.&0-
1=0
Lp trnh ha trn Java 2D v 3D
th'0 ti &C& &hn 1`a &wa ngzi (_ng ri trW v". S"! ngzi (_ng ]n
&an&'1+ th pa$e&iao$ trW v" Pa$e+or"at &ha @U tha3 i.
-rint 'ialog
Thjng thzng+ -ut ang (bng hiTn thU -ut hup th0ei in &h0 ngzi
(!ng ;hi R& ;v&h h0et y th`& n ha3 @yi nt @]-. [T hiTn thU hup
th0ei in nD3+ @en gi hD- printDialog &wa Printer>o,. CC& 1`a &hn &wa
ngzi (_ng tr0ng hup th0ei R& rDng @!u& (`a trIn *Q vD Unh (eng &wa
&C& trang tr0ng Printa,e h0& Pa$ea,e R& &!ng &]p &h0
Printer>o,. SJ! ngzi (_ng &1i&; Mi tr0ng hup th0ei in+ print&iao$ trW
v" T.4%. Cdn &1i&; vD0 Can&'1 nx trW v" 8#L2% vD viE& in &0i nh @
!a.
L.< Printin" )ith Printa+&es
C!ng &]p @ h\ trR in & @WnB
1. CDi t gia0 (iEn Printa,e T &!ng &]p -ut pag' paint'r &x thT
3 -\i trang ra T in.
2. Te0 -ut Printer>o,.
5. )i set!rinta3le T thjng @C0 &h0 Printer>o, &C&h tha& in tDi 1iE!.
)i hD- print &wa Qi tRng Printer>o, T @^t ! &jng viE&.
Tr0ng vv (b (i s3+ -ut Printa,,e N0@ R& (_ng T in 9 trang+
-\i &Ci hiTn thU -ut *Q trang -D! ,anh. [i"! ;hiTn &jng viE& R& !Wn
1H tr0ng phng tha& &hvnh+ phng tha& 1]3 v" vD i"! ;hiTn Print'rJ0@.
XiE& 3 ra f.'n('ringg R& th`& hiEn tr0ng phng tha& print &wa pag'
paint'r.
import \a.a.awt.]' import \a.a.awt.print.]'
pub*ic c*ass 0imp*erint imp*ements rintab*e
Q
httpBOOtai1i'!ha3.&0-
1=1
Lp trnh ha trn Java 2D v 3D
pri.ate static dont fnt = new
dont(^1e*.etica^,dont.N/i#,(s&'
pub*ic static .oid main(0tringKL args&
Q
// %et a rintervob
rintervob \ob = rintervob.getrintervob(&'
// 0pecif, the rintab*e is an instance of
0imp*erint \ob.setrintab*e(new 0imp*erint(&&'
// ut up the dia*og box if
(\ob.print)ia*og(&&
Q
// rint the \ob if the user didnwt
cance* printing
tr, Q \ob.print(&' 2
catch (!xception e&
Q /] hand*e exception ]/ 2
2
0,stem.exit(+&'
2
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
throws rinter!xception
Q
// pageindex + to s corresponds to page
numbers O to 5.
httpBOOtai1i'!ha3.&0-
1=2
Lp trnh ha trn Java 2D v 3D
if (pageindex q= 5& return
rintab*e.#-"0xC1"/%!'
g.setdont(fnt&'
g.setCo*or(Co*or.green&'
g.draw0tring(^age ^ k (pageindexkO&, O++,
O++&'
return rintab*e./%!"!gi0T0'
2
2
Using 0raphics2D !or 2en'ering
>en &x thT &n &C& hD- Graphics%& tr0ng phng tha& print &wa
pag' paint'r @yi tr& tiIn &h!3Tn ngZ &Wnh Graphics ti -ut
Graphics%&
Tr0ng vv (b (i s3+ &C& *Q trang R& 3 ra (_ng -ut hng r'(P
gr''nfr'(Pgr''n gra(i'ntg. [T 1D- i"! nD3+ -ut GradientPaint R& t
tr0ng ngZ &Wnh Graphics%&.
import \a.a.awt.]' import \a.a.awt.print.]'
pub*ic c*ass 0imp*erint() imp*ements
rintab*e
Q
pri.ate static dont fnt = new
dont(^1e*.etica^,dont.N/i#,(s&'
pri.ate aint pnt = new %radientaint(O++f,
O++f, Co*or.red,
httpBOOtai1i'!ha3.&0-
1=5
Lp trnh ha trn Java 2D v 3D
Ofuf, O++f, Co*or.green, true&'
pub*ic static .oid main(0tringKL args&
Q
// %et a rintervob
rintervob \ob = rintervob.getrintervob(&'
// 0pecif, the rintab*e is an instance of
0imp*erint()
\ob.setrintab*e(new 0imp*erint()(&&'
// ut up the dia*og box
if (\ob.print)ia*og(&&
Q
// rint the \ob if the user didnwt
cance* printing
tr, Q \ob.print(&' 2
catch (!xception e& Q /] hand*e exception
]/ 2
2
0,stem.exit(+&'
2
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
throws rinter!xception
Q
// pageindex + to s corresponds to page
numbers O to 5.
if (pageindex q= 5& return
rintab*e.#-"0xC1"/%!'
httpBOOtai1i'!ha3.&0-
1=7
Lp trnh ha trn Java 2D v 3D
%raphics() g( = (%raphics()& g'
// xse the font defined abo.e
g(.setdont(fnt&'
// xse the gradient co*or defined abo.e
g(.setaint(pnt&'
g(.draw0tring(^age ^ k (pageindexkO&, O++f,
O++f&'
return rintab*e./%!"!gi0T0'
2
2
?.*.% Printin$ a +ie
ihi -jt phng tha& in &wa pag' paint'r R& 3I! &! vDi 1n &h0
&_ng trang+ nx phWi R& *inh ra &_ng ! ra -\i 1n.
Cx nhi"! &C&h T &h^& &h^n rng &C& 3I! &! 1p 1ei T 3 ra -ut
trang th!n tiEn ra &_ng ! ra. Xv (b+ T &h^& &h^n rng &_ng ! ra
R& *inh ra -\i 1n hE thQng in 3I! &! &C& trang &b thT &wa -ut 6i1'
vVn @Wn+ pag' paint'r &x thT 1! trZ vD *G (bng 1ei &C& &0n tr 6i1' &h0
-\i trang h0& &haa (Z trang th`& tJ.
Tr0ng vv (b (i s3+ -ut (anh *C&h &C& 6i1' vVn @Wn R& in. TIn
&wa 6i1' R& tr!3"n nh 1D Qi *Q &h0 hD- -ain. Lp
PrintListin$Painter &haa &0n tr 6i1' th`& tJ y 1& @^t ! &wa -\i trang
-i nx R& 3I! &! T 3 raft0 r'n('rg. ihi &_ng trang R& s3 ra 1n
nZa+ &0n tr 6i1' R& r'*'t ti vU trv nh.
import \a.a.awt.]'
import \a.a.awt.print.]'
import \a.a.io.]'
httpBOOtai1i'!ha3.&0-
1=9
Lp trnh ha trn Java 2D v 3D
pub*ic c*ass rintNisting
Q
pub*ic static .oid main(0tringKL args&
Q
// %et a rintervob
rintervob \ob = rintervob.getrintervob(&'
// /sW user for page format (e.g.,
portrait/*andscape&
agedormat pf =
\ob.page)ia*og(\ob.defau*tage(&&'
// 0pecif, the rintab*e is an instance of
// rintNistingainter' a*so pro.ide gi.en
agedormat
\ob.setrintab*e(new
rintNistingainter(argsK+L&, pf&'
// rint O cop,
\ob.setCopies(O&'
// ut up the dia*og box
if (\ob.print)ia*og(&&
Q
// rint the \ob if the user didnwt
cance* printing
tr, Q \ob.print(&' 2
catch (!xception e& Q /] hand*e exception
]/ 2
2
0,stem.exit(+&'
2
httpBOOtai1i'!ha3.&0-
1=:
Lp trnh ha trn Java 2D v 3D
2
c*ass rintNistingainter imp*ements rintab*e
Q
pri.ate $andom/ccessdi*e raf'
pri.ate 0tring fi*e#ame'
pri.ate dont fnt = new dont(^1e*.etica^,
dont.N/i#, O+&'
pri.ate int rememberedageindex = XO'
pri.ate *ong remembereddi*eointer = XO'
pri.ate boo*ean remembered!-d = fa*se'
pub*ic rintNistingainter(0tring fi*e&
Q
fi*e#ame = fi*e'
tr,Q
// -pen fi*e
raf = new $andom/ccessdi*e(fi*e, ^r^&'
2
catch (!xception e& Q remembered!-d = true'
2
2
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
throws rinter!xception
Q
tr,
Q
httpBOOtai1i'!ha3.&0-
1=<
Lp trnh ha trn Java 2D v 3D
// dor catching i-!xception
if (pageindex P= rememberedageindex&
Q
// dirst time wew.e .isited this page
rememberedageindex = pageindex'
// if encountered !-d on pre.ious page,
done
if (remembered!-d& return
rintab*e.#-"0xC1"/%!'
// 0a.e current position in input fi*e
remembereddi*eointer = raf.getdi*eointer(&'
2
e*se raf.seeW(remembereddi*eointer&'
g.setCo*or(Co*or.b*acW&'
g.setdont(fnt&'
int x = (int& pf.getimageab*eg(& k O+'
int , = (int& pf.getimageab*eY(& k O('
// Tit*e *ine
g.draw0tring(^di*en ^ k fi*e#ame k ^, pagen
^ k
(pageindexkO&, x, ,&'
// %enerate as man, *ines as wi** fit in
imageab*e area
, k= fu'
whi*e (, k O( Z pf.getimageab*eY(&
kpf.getimageab*e1eight(&&
Q
0tring *ine = raf.readNine(&'
if (*ine == nu**&
httpBOOtai1i'!ha3.&0-
1==
Lp trnh ha trn Java 2D v 3D
Q
remembered!-d = true'
breaW'
2
g.draw0tring(*ine, x, ,&'
, k= O('
2
return rintab*e./%!"!gi0T0'
2
catch (!xception e& Q return
rintab*e.#-"0xC1"/%!'2
2
2
)ia0 (iEn &wa &hng trnhB
httpBOOtai1i'!ha3.&0-
1=9
Lp trnh ha trn Java 2D v 3D
-rinting /ith -agea4les an' Koo)s
CC& Pa$ea,e R& 1D- ph_ hRp vi &C& ang (bng (`a trIn @iT! (ikn 1ei
tng -inh (Z 1iE!+ trang @yi trang. Lp Book 1D -ut &C&h th!n 1Ri T
(_ng &C& Pa$ea,e+ nhng @en &ng &x thT ,s3 (`ng &! tr& Pa$ea,e
&wa &hvnh @en nJ! >00; ;hjng ph_ hRp vi &Ci &wa @en &n. Phn nD3 &h
&h0 @en &C&h (_ng >00;.
CC& Pag'a@1' N0@ R& " &p !a &C& Printa@1' N0@ @yi v hE thQng in
&x ;hW nVng 1inh h0et hn. /ut &Wi tiJn &hvnh &wa Pag'a@1' 1D *Q trang
tr0ng tDi 1iE! thzng R& @iJt vD &x thT hiEn thU &h0 ngzi (_ng tr0ng
hup th0ei in. [i"! nD3 trR gip &h0 ngzi (_ng T &h^& &h^n rng &jng
viE& fN0@g R& th`& hiEn f*p'&i6i'(g &hvnh ,C& h0& &hn -ut (Wi &C&
trang T in.
/ut >00; @iT! (ikn -ut tp &C& trang. CC& trang tr0ng -ut @00; ;hjng
phWi &ng &+ &_ng hng+ h0& pag' paint'r. Xv (b+ -ut >00; &x thT
&haa &C& trang vi 2 & &hZ tr0ng hng p0rtrait vD -ut trang & &hZ
tr0ng hng 1an(*&ap'.
ihi -ut Book ;hyi te0 D! tiIn+ nx trQng r\ng. [T thI- &C& trang vD0
-ut >00;+ @en (_ng phng tha& app'n(. Phng tha& nD3 nhn 2 Qi
tRng Pa$e+or"at ,C& Unh f('6in'*g & trang+ v_ng &x thT in+ hng vD
-ut pag' paint'r &Di t gia0 (iEn Printa,e.
Shi"! trang tr0ng -ut >00; &x thT (_ng &h!ng &_ng Unh (ang vD
paint'r. Phng tha& app'n( R& nep &hng T &h0 phcp @en thI- vD0
-ut (3 &C& trang -6 &x &_ng thR& tvnh @yi viE& ,C& Unh tha- *Q tha 5+
*Q 1Rng &C& trang.
SJ! @en ;hjng @iJt tng *Q trang tr0ng -ut >00;+ @en &x thT &h!3Tn
&h0 giC trU 4SiSMLS4/>%.M8P#)%2 &h0 phng tha& app'n(.
KE thQng in *a! x *Y gi &C& pag' paint'r &wa @en th'0 tha tb tVng (n
&h *Q trang J ;hi -ut tr0ng &hng trW v" SM24CKP#)%.
httpBOOtai1i'!ha3.&0-
190
Lp trnh ha trn Java 2D v 3D
Phng tha& set!age &x thT R& (_ng T tha3 i Unh (eng trang
h0& paint'r. Trang T tha3 i R& ,C& Unh fi('nti6i'(g @yi &h *Q trang
&Ci &h ra vU trv &wa trang tr0ng >00;.
>an gi set!agea3le vD tr!3"n tr0ng Book T &h!n @U &h0 viE& in.
KD- set!agea3l3e vD hD- set!rinta3le 1D 10ei trt nha!. D0 x @en gi
-ut h0& &Ci nD3 h0& &Ci ;ia &ha ;hjng thT &W hai ;hi ang &h!n @U in
Print'rJ0@.
?.-.( _sin$ a Pa$ea,e >o,
Xv (b *a!+ -ut Book R& (_ng T te0 1ei vv (!N in n giWn !
tiInf D0 trzng hRp nD3 a n giWn+ &x r]t it 1Ri v&h tr0ng viE& (_ng
-ut Pa$ea,e N0@ tha3 &h0 -ut Printa,e N0@+ nhng nx -inh h0e & @Wn
&C&h &_ng -ut >00;g Ch H rng @en vn phWi &Di t gia0 (iEn Printa@1'
vD th`& hiEn pag' r'n('ring tr0ng phng tha& print &wa pag' paint'r.
import \a.a.awt.]'
import \a.a.awt.print.]'
pub*ic c*ass 0imp*erintBooW imp*ements
rintab*e
Q
pri.ate static dont fnt = new
dont(^1e*.etica^,dont.N/i#,(s&'
pub*ic static .oid main(0tringKL args&
Q
// %et a rintervob
rintervob \ob = rintervob.getrintervob(&'
// 0et up a booW
BooW bW = new BooW(&'
httpBOOtai1i'!ha3.&0-
191
Lp trnh ha trn Java 2D v 3D
bW.append(new 0imp*erintBooW(&,
\ob.defau*tage(&, 5&'
// ass the booW to the rintervob
\ob.setageab*e(bW&'
// ut up the dia*og box
if (\ob.print)ia*og(&&
Q
// rint the \ob if the user didnwt
cance* printing
tr, Q \ob.print(&' 2
catch (!xception e& Q /] hand*e exception
]/ 2
2
0,stem.exit(+&'
2
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
throws rinter!xception
Q
g.setdont(fnt&'
g.setCo*or(Co*or.green&'
g.draw0tring(^age ^ k (pageindexkO&, O++,
O++&'
return rintab*e./%!"!gi0T0'
2
2
)ia0 (iEn &wa &hng trnhB
httpBOOtai1i'!ha3.&0-
192
Lp trnh ha trn Java 2D v 3D
?.-.% _sin$ /utipe Pa$e Painters
Xv (b (i s3+ &x hai pag' paint'r ;hC& nha! R& *G (bngB -ut &h0
@a vD -ut &h0 &C& trang @In tr0ng. Trang @a R& in tr0ng 1an(*&ap'
-0(' vD nui (!ng in p0rtrait -0('.
import \a.a.awt.]'
import \a.a.awt.print.]'
pub*ic c*ass rintBooW
Q
pub*ic static .oid main(0tringKL args&
Q
// %et a rintervob
rintervob \ob = rintervob.getrintervob(&'
// Create a *andscape page format
agedormat pf* = \ob.defau*tage(&'
pf*.set-rientation(agedormat.N/#)0C/!&'
// 0et up a booW
BooW bW = new BooW(&'
httpBOOtai1i'!ha3.&0-
195
Lp trnh ha trn Java 2D v 3D
bW.append(new aintCo.er(&, pf*&'
bW.append(new aintContent(&,
\ob.defau*tage(&, (&'
// ass the booW to the rintervob
\ob.setageab*e(bW&'
// ut up the dia*og box
if (\ob.print)ia*og(&&
Q
// rint the \ob if the user didnwt
cance* printing
tr, Q \ob.print(&' 2
catch (!xception e& Q /] hand*e exception
]/ 2
2
0,stem.exit(+&'
2
2
c*ass aintCo.er imp*ements rintab*e
Q
dont fnt = new dont(^1e*.eticaXBo*d^,
dont.N/i#, e(&'
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
throws rinter!xception
Q
g.setdont(fnt&'
g.setCo*or(Co*or.b*acW&'
httpBOOtai1i'!ha3.&0-
197
Lp trnh ha trn Java 2D v 3D
int ,c = (int& (pf.getimageab*eY(& k
pf.getimageab*e1eight(&/(&'
g.draw0tring(^Vidgets, inc.^, e(, ,ckfu&'
return rintab*e./%!"!gi0T0'
2
2
c*ass aintContent imp*ements rintab*e
Q
pub*ic int print(%raphics g, agedormat pf,
int pageindex&
throws rinter!xception
Q
%raphics() g( = (%raphics()& g'
int use$ed = +'
int xo = (int& pf.getimageab*eg(&'
int ,o = (int& pf.getimageab*eY(&'
// di** page with circ*es or sbuares,
a*ternating red [ green
for (int x = +' xk(Y Z
pf.getimageab*eVidth(&' x k= fu&
for (int , = +' ,k(Y Z
pf.getimageab*e1eight(&' , k= fu&
Q
if (use$ed == +& g.setCo*or(Co*or.red&'
e*se g.setCo*or(Co*or.green&'
use$ed = O X use$ed'
httpBOOtai1i'!ha3.&0-
199
Lp trnh ha trn Java 2D v 3D
if (pageindex y ( == +& g.draw$ect(xokxks,
,ok,ks, (Y, (Y&'
e*se g.draw-.a*(xokxks, ,ok,ks, (Y, (Y&'
2
return rintab*e./%!"!gi0T0'
2
)ia0 (iEn &!a &hng trnhB
Xv (b in -ut -ut &hng trnh.
import \a.a.awt.geom.]'
import \a.a.awt.e.ent./ctionNistener'
import \a.a.awt.e.ent./ction!.ent'
import \a.a.awt.print.rintervob'
import \a.a.awt.e.ent.]'
import \a.a.awt.]'
import \a.ax.swing.]'
httpBOOtai1i'!ha3.&0-
19:
Lp trnh ha trn Java 2D v 3D
import \a.a.awt.print.]'
pub*ic c*ass 0hapesrint extends vane*
imp*ements rintab*e, /ctionNistener Q
fina* static Co*or bg = Co*or.white'
fina* static Co*or fg = Co*or.b*acW'
fina* static Co*or red = Co*or.red'
fina* static Co*or white = Co*or.white'
fina* static Basic0troWe stroWe = new
Basic0troWe((.+f&'
fina* static Basic0troWe wide0troWe = new
Basic0troWe(Y.+f&'
fina* static f*oat dashOKL = Q O+.+f 2'
fina* static Basic0troWe dashed = new
Basic0troWe(O.+f,
Basic0troWe.C/"BxTT,
Basic0troWe.v-i#"MiT!$, O+.+f, dashO, +.+f&'
fina* static vButton button = new
vButton(^in^&'
httpBOOtai1i'!ha3.&0-
19<
Lp trnh ha trn Java 2D v 3D
pub*ic 0hapesrint(& Q
setBacWground(bg&'
button.add/ctionNistener(this&'
2
pub*ic .oid actionerformed(/ction!.ent e& Q
if (e.get0ource(& instanceof vButton& Q
rintervob printvob =
rintervob.getrintervob(&'
printvob.setrintab*e(this&'
if (printvob.print)ia*og(&& Q
tr, Q
printvob.print(&'
2 catch (!xception ex& Q
ex.print0tacWTrace(&'
2
2
2
2
pub*ic .oid paintComponent(%raphics g& Q
super.paintComponent(g&'
%raphics() g( = (%raphics()& g'
draw0hapes(g(&'
2
pub*ic .oid draw0hapes(%raphics() g(& Q
)imension d = get0ize(&'
int gridVidth = s++ / u'
httpBOOtai1i'!ha3.&0-
19=
Lp trnh ha trn Java 2D v 3D
int grid1eight = f++ / ('
int rowspacing = 5'
int co*umnspacing = e'
int rectVidth = gridVidth X
co*umnspacing'
int rect1eight = grid1eight X rowspacing'
Co*or fgf) = Co*or.*ight%ra,'
g(.setaint(fgf)&'
g(.draw$ect(Y+, Y+, s++ X O, fO+&'
g(.setaint(fg&'
int x = Y5'
int , = Ye'
g(.draw(new Nine().)oub*e(x, , k
rect1eight X O, x k rectVidth, ,&&'
x k= gridVidth'
g(.set0troWe(stroWe&'
g(.draw(new $ectang*e().)oub*e(x, ,,
rectVidth, rect1eight&&'
x k= gridVidth'
g(.set0troWe(dashed&'
g(
.draw(new
$ound$ectang*e().)oub*e(x, ,, rectVidth,
rect1eight,
O+, O+&&'
x k= gridVidth'
g(.set0troWe(wide0troWe&'
g(.draw(new /rc().)oub*e(x, ,, rectVidth,
rect1eight, r+, Of5,
httpBOOtai1i'!ha3.&0-
199
Lp trnh ha trn Java 2D v 3D
/rc().-!#&&'
x k= gridVidth'
g(.set0troWe(stroWe&'
g(.draw(new !**ipse().)oub*e(x, ,,
rectVidth, rect1eight&&'
x k= gridVidth'
int xOointsKL = Q x, x k rectVidth, x, x
k rectVidth 2'
int ,OointsKL = Q ,, , k rect1eight, , k
rect1eight, , 2'
%enera*ath po*,gon = new
%enera*ath(%enera*ath.Vi#)"!z!#"-)),
xOoints.*ength&'
po*,gon.mo.eTo(xOointsK+L, ,OointsK+L&'
for (int index = O' index Z
xOoints.*ength' indexkk& Q
po*,gon.*ineTo(xOointsKindexL,
,OointsKindexL&'
2
'
po*,gon.c*oseath(&'
g(.draw(po*,gon&'
x = Y5'
, k= grid1eight'
int x(ointsKL = Q x, x k rectVidth, x, x
k rectVidth 2'
int ,(ointsKL = Q ,, , k rect1eight, , k
rect1eight, , 2'
httpBOOtai1i'!ha3.&0-
200
Lp trnh ha trn Java 2D v 3D
%enera*ath po*,*ine = new
%enera*ath(%enera*ath.Vi#)"!z!#"-)),
x(oints.*ength&'
po*,*ine.mo.eTo(x(ointsK+L,
,(ointsK+L&'
for (int index = O' index Z
x(oints.*ength' indexkk& Q
po*,*ine.*ineTo(x(ointsKindexL,
,(ointsKindexL&'
2
'
g(.draw(po*,*ine&'
x k= gridVidth'
g(.setaint(red&'
g(.fi**(new $ectang*e().)oub*e(x, ,,
rectVidth, rect1eight&&'
g(.setaint(fg&'
x k= gridVidth'
%radientaint redtowhite = new
%radientaint(x, ,, red, x k rectVidth,
,, white&'
g(.setaint(redtowhite&'
g(
.fi**(new
$ound$ectang*e().)oub*e(x, ,, rectVidth,
rect1eight,
O+, O+&&'
g(.setaint(fg&'
x k= gridVidth'
httpBOOtai1i'!ha3.&0-
201
Lp trnh ha trn Java 2D v 3D
g(.setaint(red&'
g(.fi**(new /rc().)oub*e(x, ,, rectVidth,
rect1eight, r+, Of5,
/rc().-!#&&'
g(.setaint(fg&'
x k= gridVidth'
redtowhite = new %radientaint(x, ,, red,
x k rectVidth, ,, white&'
g(.setaint(redtowhite&'
g(.fi**(new !**ipse().)oub*e(x, ,,
rectVidth, rect1eight&&'
g(.setaint(fg&'
x k= gridVidth'
int xfointsKL = Q x, x k rectVidth, x, x
k rectVidth 2'
int ,fointsKL = Q ,, , k rect1eight, , k
rect1eight, , 2'
%enera*ath fi**edo*,gon = new
%enera*ath(%enera*ath.Vi#)"!z!#"-)),
xfoints.*ength&'
fi**edo*,gon.mo.eTo(xfointsK+L,
,fointsK+L&'
for (int index = O' index Z
xfoints.*ength' indexkk& Q
fi**edo*,gon.*ineTo(xfointsKindexL,
,fointsKindexL&'
2
'
httpBOOtai1i'!ha3.&0-
202
Lp trnh ha trn Java 2D v 3D
fi**edo*,gon.c*oseath(&'
g(.setaint(red&'
g(.fi**(fi**edo*,gon&'
g(.setaint(fg&'
g(.draw(fi**edo*,gon&'
2
pub*ic int print(%raphics g, agedormat pf,
int pi& throws rinter!xception Q
if (pi q= O& Q
return rintab*e.#-"0xC1"/%!'
2
draw0hapes((%raphics()& g&'
return rintab*e./%!"!gi0T0'
2
pub*ic static .oid main(0tring sKL& Q
VindowNistener * = new Vindow/dapter(& Q
pub*ic .oid
windowC*osing(Vindow!.ent e& Q
0,stem.exit(+&'
2
pub*ic .oid windowC*osed(Vindow!.ent
e& Q
0,stem.exit(+&'
2
2'
vdrame f = new vdrame(&'
httpBOOtai1i'!ha3.&0-
205
Lp trnh ha trn Java 2D v 3D
f.addVindowNistener(*&'
vane* pane* = new vane*(&'
pane*.add(button&'
f.getContentane(&.add(BorderNa,out.0-xT1,
pane*&'
f.getContentane(&.add(BorderNa,out.C!#T!$,
new 0hapesrint(&&'
f.set0ize(5Y+, 5++&'
f.show(&'
2
2
)ia0 (iEn &wa &hng trnhB
httpBOOtai1i'!ha3.&0-
207
Lp trnh ha trn Java 2D v 3D
httpBOOtai1i'!ha3.&0-
209
Lp trnh ha trn Java 2D v 3D
Ph7n 2
Lp trnh ha vi Java <D
httpBOOtai1i'!ha3.&0-
20:
Lp trnh ha trn Java 2D v 3D
C*ABCG 1
C*DP 6EC >DP TRFC* TRGC JAHA "D
1.1 T7n" 89an vC Java <D 0P1 /
Java 5D #P$ R& thta ;J tt &C& 1p &wa Nava &h0 phcp te0 &C& gia0
(iEn pha& tep nh hE thQng s- thanh vD hnh Wnh 5 &hi"!. Sgzi 1p trnh
&x thT *G (bng nx T ,s3 (`ng i"! ;hiTn &C& Qi tRng hnh h& 5 &hi"!.
ShZng Qi tRng nD3 & tr trIn -ut -ji trzng W0 *a! x -i R&
(`ng hnh 1ei. CC& hD- #P$ R& thiJt ;J r]t 1inh ung &h0 phcp te0 -ut
trzng W0 x &hvnh ,C& vi r]t nhi"! (eng ;v&h & tt 1n Jn @c.
D_ &x nhi"! &ha& nVng nh v3 nhng &C& hD- #P$ vn &x thT *G
(bng r rDng. CC& &hi tiJt R& (ng hnh t` ung. 2G (bng 1Ri thJ &wa
&C& 1!ng tr0ng Nava+ viE& (`ng hnh tr0ng Java 5D &h0 phcp 1D- *0ng
*0ng+ ng thzi &ng &h0 phcp tQi h! hxa viE& (`ng hnh. Chng trnh
Java 5D te0 &C& in*tan&'* &wa &C& Qi tRng vD a &hng vD0 & *y (Z
1iE! thU ;h!ng &Wnh. [ thU ;h!ng &Wnh 1D -ut *^p ,Jp &C& Qi tRng
Java 5D trIn -ut &]! tr& &s3 &h0 phcp &h ra nui (bng &wa -ut thJ gii
W0 vD &hng &x thT R& (`ng hnh nh thJ nD0.
Chng trnh Java 5D &x thT R& viJt T &he3 u& 1p ha3 nh 1D -ut
app1't trIn &C& trnh (!3Et h\ trR Java 5D h0& &W 2.
httpBOOtai1i'!ha3.&0-
20<
Lp trnh ha trn Java 2D v 3D
1.2 *2c vQn C cR +Fn vC Java <D 0P1/
Java 5D #P$ Unh nghha hn 100 1p tr0ng gxi 0avax."edia.0*d
nhZng 1p nD3 R& &0i nh 1D nhZng 1p & @Wn nh]t &wa Java 5D.
Cx Jn hDng trV- trzng vD phng tha& tr0ng &C& 1p &wa Java 5D
#P$ t!3 nhiIn -ut -ji trzng W0 n giWn &h &n (_ng -ut vDi 1p.
Chng nD3 -j tW tp nh nh]t &C& Qi tRng vD tng tC& giZa &hng T
(`ng nIn -ut -ji trzng W0.
Chng nD3 &dn @a0 g- vv (b K'110Java5D hiTn thi -ut ;hQi 1p
phng !a3. Xv (b nD3 R& phCt triTn th'0 ttng @& 1n 1Rt thT hiEn
&C& phn ,G 1v tr0ng 1p trnh Java 5D.
Sg0Di gxi nhsn Java 5D &hng ta &dn *G (bng thI- -ut gxi nZa 1D
&0-.*!n.N5(.!ti1* thzng gi 1D &C& 1p tiEn (bng+ &hng @ *!ng thI-
nhZng tvnh nVng hiE! !W vD r]t -enh &h0 nhsn.
Lp !ti1it3 g- 7 -b&B &0nt'nt 10a('rfnep nui (!ngg+ h\ trR ,s3 (`ng
thU ;h!ng &Wnh+ &C& 1p hnh h&+ vD &C& &jng &b tiEn v&h.
T]t nhiIn 1D ng0Di gxi nhsn vD gxi tiEn v&h th -i &hng trnh Nava
"! *G (bng &C& 1p tt gxi 0ava.a1t vD 0avax.vec"ath. )xi 0ava.a1t
Unh nghha &C& 1p #LT &h0 phcp te0 &Ga * &h0 viE& (`ng hnh. )xi
0avax.vec"ath Unh nghha &C& 1p &h0 iT-+ v'&t0r -a trn vD nhZng Qi
tRng t0Cn h& ;hC&.
Tr0ng phn &dn 1ei &wa giC0 trnh nD3 tt vi*!a1 0@N'&tfQi tRng !an *Ctg
R& *G (bng tha3 &h0 -ut Qi tRng tr0ng thU ;h!ng &Wnh.f&hng
henB -ut hnh 1p phng ha3 hnh &!g. Tt 0@N'&t R& *G (bng &h0 -ut
in*tan&' &wa -ut 1p. C0nt'nt tng ang vi nhZng Qi tRng !an *Ct
tr0ng -ut thU ;h!ng &Wnh.
1.< ST, dUn" thI (h9n" cFnh
/ji trzng W0 tr0ng Java 5D R& te0 tt -ut thU ;h!ng &Wnh+ -ut
thU ;h!ng &Wnh R& te0 nIn @yi &C& in*tan&' &wa &C& 1p Java 5D. [
httpBOOtai1i'!ha3.&0-
20=
Lp trnh ha trn Java 2D v 3D
thU ;h!ng &Wnh x R& ghcp nQi @yi &C& Qi tRng R& Unh nghha v"
-t hnh h&+ s- thanh vD Cnh *Cng+ vU trv+ hng vD @" ng0Di v" tr`&
!an &ng nh s- thanh &wa Qi tRng. Xi -ut thU @nh thzng th
&]! tr& (Z 1iE! ha3 (_ng 1D &C& nt vD &C& &!ng. /ut nt &wa thU
;h!ng &Wnh 1D -ut in*tan&' &wa -ut 1p Java 5D. CC& &!ng ei (iEn &h0 2
(eng !an hE giZa &C& in*tan&'* &wa Java 5D.
F!an hE ha3 gp nh]t 1D !an hE &ha &0n -ut nt &ha &x r]t nhi"! nt
&0n. /ut !an hE ;hC& 1D !an hE tha- &hiJ!. /ut tha- &hiJ! 1iIn ;Jt
-ut Qi tRng bodeCo"ponent vi -ut nt &wa thU ;h!ng &Wnh.
bodeCo"ponent Unh nghha v" -t hnh h& vD &C& th!u& tvnh @" -t
R& *G (bng T (`ng nIn Qi tRng !an *Ct.
[ thU ;h!ng &Wnh tr0ng Java 5D R& &]! thDnh tt &C& nt Qi tRng
tr0ng &C& -Qi 1iIn hE &ha &0n Unh ra -ut &]! tr& &s3. Tr0ng &s3 nD3 &h
&x -ut nt gQ&. CC& nt &dn 1ei R& tr!3 &p ti thjng !a &C& &!ng i tt
nt gQ&+ &C& &!ng trIn &s3 ;hjng te0 thDnh &h! trnh. /ut thU ;h!ng
&Wnh R& Unh (eng tt &C& &s3 -D gQ& tei &C& Qi tRng ,W3 ra.
bodeCo"ponent vD &C& &!ng tha- &hiJ! ;hjng phWi 1D -ut phn &wa
thU ;h!ng &Wnh.
Ch tn tei -ut zng (!3 nh]t tt gQ& &wa &s3 Jn -ut 1C+ tt x &h &x
-ut zng i (!3 nh]t tt gQ& &wa -ut thU ;h!ng &Wnh Jn -\i nt 1C.
[zng i x gi 1D zng i &wa thU ;h!ng &Wnh. Tt x &h &x -ut
zng i thU ;h!ng &Wnh Jn -\i 1C tr0ng -ut thU ;h!ng &Wnh.
/\i (zng i thU ;h!ng &Wnh tr0ng thU ;h!ng &Wnh &wa Java 5D
&h ra thjng tin v" treng thCi &wa 1C. Thjng tin treng thCi x @a0 g- Ua
iT-+ hng+ vD ;v&h th& &wa Qi tRng !an *Ct. iJt !W 1D &C& th!u&
tvnh tr`& !an &wa -\i Qi tRng !an *Ct phb th!u& vD0 -\i zng i
trIn thU ;h!ng &Wnh &wa nx. >u (`ng hnh Java 5D (`a trIn iT- nD3
T (`ng nIn &C& 1C th'0 tha t` hiE! !W nh]t. ShZng ngzi 1p trnh Java
5D thzng ;hjng phWi i"! ;hiTn !C trnh nD3.
httpBOOtai1i'!ha3.&0-
209
Lp trnh ha trn Java 2D v 3D
X" -t ha th -ut thU ;h!ng &Wnh R& (_ng nh 1D -ut &jng
&b thiJt ;J h0& tDi 1iE! hxa &h0 &C& trng trnh Java 5D. [ thU ;h!ng
&Wnh R& vY trIn &C& @iT! tRng nh hnh 1.1. Chng trnh Java 5D &x
thT &x nhi"! Qi tRng hn *0 vi nhZng Qi tRng y tr0ng thU nD3.
Sh v3 T thiJt ;J -ji trzng W0+ thU ;h!ng &Wnh R& vY (`a
trIn nhZng @iT! tRng &h!n. 2a! ;hi viE& thiJt ;J h0Dn thDnh+ *
thU ;h!ng &Wnh *Y 1D tiI! &hv &wa &hng trnh. 2a! ;hi &hng trnh h0Dn
thDnh+ -ut thU ;h!ng &Wnh tng t` ei (iEn &h0 &hng trnh fgiW *G
1D nhZng & iT- x R& t!sn th'0g. [ thU R& vY tt &hng trnh
-inh &hang &h0 thU -D &hng trnh te0 ra.
/\i -ut @iT! tRng y phva @In trCi &wa hnh 1.1 ei iEn &h0 -ut Qi
tRng n 1 ;hi *G (bng tr0ng thU ;h!ng &Wnh. 2 @iT! tRng ! tiIn
ei (iEn &h0 &C& Qi tRng &wa 2 1p & @iEt Cirtua_niverse vD Locae.
5 @iT! tRng tiJp th'0 ei (iEn &h0 &C& Qi tRng &wa &C& 1p Group+
Leaf vD bodeCo"ponent. 5 @iT! tRng *a! x thzng R& (_ng T &h
&C& 1p &0n &wa nhZng Qi tRng trIn. >iT! tRng &!Qi &_ng @In trCi ei
(iEn &h0 @]t &a 1p &wa Qi tRng nD0.
/i tIn 1i"n ei (iEn &h0 -ut 1iIn ;Jt &ha &0n giZa 2 Qi tRng. Sct at
&h tha- &hiJ! Jn -ut Qi tRng ;hC&. [Qi tRng R& tha- &hiJ! &x
httpBOOtai1i'!ha3.&0-
210
Lp trnh ha trn Java 2D v 3D
thT &hia * giZa &C& nhCnh ;hC& nha! &wa -ut thU ;h!ng &Wnh. Di
s3 1D -ut vv (b fKnh 1.2g
.]t (k ,s3 (`ng -ut thU ;h!ng &Wnh *ai. /ut vv (b *ai n giWn &x
thT ,'- y hnh 1P5. [ thU nD3 *ai @yi v nx vi phe- nhZng & tvnh &wa
D#). X]n " n- y &h\ &h vi 2 Qi tRng Transfor"Group &x &h!ng
-ut Qi tRng 1C Shape*& 1D &0n. Sh rng -ut Qi tRng 1C &h &x thT
&x 1 &ha (!3 nh]t. Sxi &C&h ;hC& &h &x -ut zng i tt Qi tRng
L0&a1' Jn 1 1C fha3 1D zng tt -ut 1C Jn -ut Locaeg.
>en &x thT nghh &]! tr& ,s3 (`ng tr0ng hnh 1P5 Unh nghha 5 Qi
tRng !an *Ct tr0ng -ut -ji trzng W0+ Sx ,!]t hiEn trIn @iT! ;h!ng
&Wnh (`a trIn Unh nghha 2 Qi tRng !an *Ct thjng !a *G (bng Qi
tRng !an *Ct Shape*& phva @In phWi &wa thU. /D (`a trIn &C& ;hCi
niE-+ -\i Qi tRng Transfor"Group &ha &h!ng &wa Qi tRng
Shape*& phWi t -ut hnh Wnh &wa Qi tRng !an *Ct trIn &C& vU trv
;hC& nha!. T!3 nhiIn s3 1D -ut thU ;hjng hRp 1E v &!ng &ha &0n
httpBOOtai1i'!ha3.&0-
211
Lp trnh ha trn Java 2D v 3D
;hjng Unh ra -ut &s3. Tr0ng vv (b nD3+ ;Jt !W 1D Qi tRng Shape*& &x
hn 1 &ha.
2` tranh &i v" &]! tr& &wa &s3 vD D#) 1D &hvnh ,C&. T!3 nhiIn hE
thQng r!nti-' &wa Java 5D a ra thjng @C0 &x 1\i tr0ng -Qi !an hE &ha
&0n. X ;Jt !W &wa *` gii hen &]! tr& &s3 -D -\i Qi tRng Shape*&
@U hen &hJ &h &x -ut &ha. Xi vv (b tr0ng hnh 1P5+ 1\i thjng @C0 1D &hvnh
1D viE& &x nhi"! &ha. TrIn hnh 1P7 a ra giWi phCp &h0 v]n " nD3.
Chng trnh Java 5D -D &x thU ;h!ng &Wnh ;hjng hRp 1E &x thT
(U&h R& nhng ;hjng thT (U&h R&. ihi -ut &hng trnh Java 5D &x
thU ;h!ng &Wnh ;hjng hRp 1E R& &he3+ hE thjng Java 5D *Y phCt hiEn
ra v]n ". XD ;hi v]n " R& phCt hiEn th hE thQng Java 5D *Y thjng
@C0 1\i. Chng trnh &x thT vn &he3 nhng vn &n phWi (tng 1ei v
&hng &x hnh Wnh nD0 (`ng nIn &W.
/\i thU ;h!ng &Wnh &h &x -ut -ji trzng W0. [Qi tRng -ji trzng
W0 &x -ut (anh *C&h &C& Qi tRng Locae. /ut Qi tRng Locae &!ng
&]p -ut iT- tha- &hiJ! tr0ng -ji trzng W0 x. Cx thT &0i nh Qi
httpBOOtai1i'!ha3.&0-
212
Lp trnh ha trn Java 2D v 3D
tRng Locae 1D &ut -Q& *G (bng T ,C& Unh vU trv &wa &C& Qi tRng
!an *Ct tr0ng -ji trzng W0.
thT &x nhi"! -ji trzng W0 tr0ng -ut &hng trnh Java 5D+ v thJ &x
thT Unh nghha nhi"! hn -ut -ji trzng W0. T!3 nhiIn+ ;hjng &x &C&h
&Q Unh nD0 &h0 viE& 1iIn 1e& giZa &C& -ji trzng W0 nD3. ra hn+ -ut Qi
tRng thU ;h!ng &Wnh ;hjng thT tn tei tr0ng a -ji trzng W0 &_ng
-ut 1&. D0 x &h nIn *G (bng -ut vD &h -ut in*tan&' &wa -ji trzng
W0 tr0ng -\i &hng trnh Java 5D.
Tr0ng ;hi -ut Qi tRng -ji trzng W0 &x thT tha- &hiJ! Jn nhi"! Qi
tRng Locae th h! hJt &C& &hng trnh Java 5D &h &x -ut Qi tRng
L0&a1'. /\i Qi tRng L0&a1' &x thT phb& vb nh 1D gQ& &wa nhi"! thU
&0n &wa thU ;h!ng &Wnh. Th'0 vv (b y hnh 1P2 &x thT th]3 Qi tRng
L0&a1' &x 2 nhCnh thU &0n tt nx.
CC& thU &0n th phsn ra 1D- 2 10ei nhCnh hnh tha& vD nhCnh nui
(!ng. ShCnh nui (!ng &h ra nui (!ng &wa -ji trzng W0 hnh h&+ @"
-t+ hDnh vi+ Ua iT-+ s- thanh+ vD Cnh *Cng. ShCnh hnh tha& &h ra &C&
tha- *Q &h0 phcp ,'- nh Ua iT- ,'- vD hng ,'-.
httpBOOtai1i'!ha3.&0-
215
Lp trnh ha trn Java 2D v 3D
(.*.( Thca kd cVp cao tc >ava *& !P.
Cx 5 &]p thta ;J tt Java 5D #P$ thT hiEn tr0ng hnh 9P1. Thjng !a
&]! tr& nD3 &hng ta *Y hnh (!ng R& &hng trnh Java 5D nh thJ
nD0.
Lp node
Lp n0(' 1D 1p &ha &wa 2 1p Group vD Leaf+ Unh nghha nhZng
phng tha& &h!ng vD r]t !an trng &h0 &C& 1p &0n &wa nx. Thjng tin
v" &C& phng tha& nD3 *Y R& -j tW y phn *a! &wa tDi 1iE!
Lp Group
Lp gr0!p 1D 1p gQ& *G (bng T &h ra vU trv vD hng &wa Qi tRng
!an *Ct tr0ng -ut -ji trzng W0. 2 1p &0n &wa 1D BranchGroup vD
Transfor"Group. Tr0ng thU ;h!ng &Wnh hnh Wnh ei (iEn &wa 2 1p
nD3 &x @iT! tRng 1D hnh trdn vD thzng R& viJt t^t thDnh >) vD T).
Lp Leaf
httpBOOtai1i'!ha3.&0-
217
Lp trnh ha trn Java 2D v 3D
Lp Leaf 1D 1p gQ& T Unh nghha hnh (eng+ s- thanh+ vD hDnh vi
&wa Qi tRng !an *Ct tr0ng -ui trzng W0. /ut vDi 1p &0n &wa 1p nD3
1D Shape*&+ Li$ht+ Behavior vD Sound. ShZng Qi tRng nD3 &x thT
;hjng &x 1p &0n nhng phWi tha- &hiJ! Jn bodeCo"ponent.
Lp bodeCo"ponent
Lp bodeCo"ponent 1D 1p gQ& *G (bng T -j tW v" hnh h&+ @"
-t+ t',t!r' vD nhZng th!u& tvnh &wa n0(' Shape*&. bodeCo"ponent
;hjng phWi 1D -ut phn &wa thU ;h!ng &Wnh nhng 1ei R& tha- &hiJ!
Jn. /ut bodeCo"ponent &x thT R& tha- &hiJ! @i nhi"! Qi tRng
Shape*&.
httpBOOtai1i'!ha3.&0-
219
Lp trnh ha trn Java 2D v 3D
1;) C#h thI $+ viJt KLt hng tr'nh Java "D
XiE& ,s3 (`ng -ut &hng trnh Java 5D g- &x < @& R& gii
thiE! tr0ng hnh 1P:. [s3 1D &jng tha& hZ! v&h T ,s3 (`ng &C& ang (bng
Java 5D.
Cjng tha& nD3 &ng @ !a -jt vDi &hi tiJt nhng (ikn tW phn 1n
nhZng &jng viE& &n 1D- tr0ng x viE& te0 &C& nhCnh thU &wa thU
;h!ng &Wnh 1D &jng viE& !an trng nh]t &wa viE& 1p trnh. Tr0ng phn
ti &hng ta *Y R& @iJt 1D- thT nD0 T te0 -ut thU ;h!ng &Wnh -D
;hjng phWi 1p trnh nhi"!.
(.-.( C`n$ thRc ;n $iJn Q vidt "et chf;n$ trUnh >ava *&
CC& &hng trnh &wa Java 5D R& viJt *G (bng &jng tha& trIn &x
nhCnh thU hnh tha& &x &]! tr& ng ^n+ vD &]! tr& nD3 *n &x
tr0ng 1p 2i-p1'4niv'r*'. /\i in*tan&' &wa 1p nD3 th`& hiEn &C& @&
2+5+7 trIn &jng tha& & @Wn trIn i"! x gip &h0 ngzi 1p trnh giW-
thiT! thzi gian vD &jng *a& T te0 nhCnh hnh tha& !a x tp tr!ng vD0
&jng viE& &hvnh 1D nui (!ng hn. Cjng viE& th`& *` ;hi viJt -ut &hng
trnh Java 5D 1D nh v3.
1. Cr'at' a Canva*5D 0@N'&t
2. Cr'at' a Xirt!a14niv'r*' 0@N'&t
5. Cr'at' a L0&a1' 0@N'&t+ atta&hing it t0 th' Xirt!a14niv'r*' 0@N'&t
7. C0n*tr!&t a vi'? @ran&h graph
a. Cr'at' a Xi'? 0@N'&t
@. Cr'at' a Xi'?P1at60r- 0@N'&t
&. Cr'at' a Ph3*i&a1>0(3 0@N'&t
(. Cr'at' a Ph3*i&a1%nvir0n-'nt 0@N'&t
'. #tta&h Xi'?P1at60r-+ Ph3*i&a1>0(3+ Ph3*i&a1%nvir0n-'nt+ an(
Canva*5D 0@N'&t* t0 Xi'? 0@N'&t
httpBOOtai1i'!ha3.&0-
21:
Lp trnh ha trn Java 2D v 3D
9. C0n*tr!&t &0nt'nt @ran&h graphf*g
:. C0-pi1' @ran&h graphf*g
<. $n*'rt *!@graph* int0 th' L0&a1'
XiE& *G (bng 1p nD3 &h0 phcp ngzi 1p trnh te- !In i nhCnh
thU hnh tha&. T!3 nhiIn nx ;hjng &h0 phcp &x nhi"! vi'? tr0ng -ji
trzng W0 &wa nx.
Si#pleUniverse Class
KD- ;hyi te0 &wa Qi tRng Si"pe_niverse te0 nIn thU ;h!ng
&Wnh @a0 g- &C& Qi tRng Cirtua_niverse vD Locae vD -ut nhCnh
thU hnh tha& h0Dn thiEn.
ShCnh nD3 *G (bng in*tan&'* &wa &C& 1p Cie1in$Patfor" vD Cie1er
tr0ng nhsn &wa 1p T te0 thDnh nhCnh thU hnh tha&. [Qi tRng
Si"pe_niverse &!ng &]p t]t &W &C& &ha& nVng R& &h ra tr0ng hnh 1P
<.
)xi co".sun.0*d.utis.universe &haa &C& 1p Si"pe_niverse+
Cie1in$Patfor" vD Cie1er.
httpBOOtai1i'!ha3.&0-
21<
Lp trnh ha trn Java 2D v 3D
XiE& *G (bng 1p Si"pe_niverse 1D &h0 &jng viE& n giWn hn r]t
nhi"!. Knh 1P= a ra &jng tha& n giWn hn tr0ng x &C& @& 2+5+7
R& tha3 @ng @& 2 &wa &jng tha& -i.
1. Cr'at' a Canva*5D M@N'&t
2. Cr'at' a 2i-p1'4niv'r*' 0@N'&t ?hi&h r'6'r'n&'* th' 'ar1i'r
Canva*5D 0@N'&t
a. C!*t0-i' th' 2i-p1'4niv'r*' 0@N'&t
5. C0n*tr!&t &0nt'nt @ran& h
7. C0-pi1' &0nt'nt @ran&h graph
9. $n*'rt &0nt'nt @ran&h graph int0 th' L0&a1' 06 th' 2i-p1'4niv'r*'
Si"pe_niverse Constructor $xi &0-.*!n.N5(.!ti1*.!niv'r*'
Lp tiEn v&h nD3 &h0 phcp (k (Dng &Di t -ji trzng ngzi (_ng+ te0
&C& Qi tRng &n thiJt &h0 thU nhCnh hnh tha&. Lp nD3 te0 nIn &C&
Qi tRng L0&a1'+ Xirt!a14niv'r*'+ Xi'?ingP1at60r- vD Xi'?'r fvi t]t
&W &C& giC trU -& Unh &wa &hngg. CC& Qi tRng nD3 1iIn hE vi nha! T
te0 nIn thU nhCnh hnh tha&.
Phng tha& ;hyi te0 !an trng
"i+ple_niverse [\
ihyi te0 -ut -ji trzng W0
"i+ple_niverse [)anvas3D &anvas3D\
ihyi te0 -ut -ji trzng W0 vi tha- &hiJ! Jn Qi tRng R& t
tIn 1D Canva*5D
[Qi tRng Si"pe_niverse te0 thDnh -ut thU nhCnh hnh tha&
h0Dn thiEn &h0 -ut -ji trzng W0. [ thU nD3 @a0 g- -ut @Wng hnh
Wnh. /ut @Wng hnh Wnh 1D -ut (eng hnh &hZ nht 1D ni -D nui (!ng &wa
R& &hiJ! Jn T Unh (eng hnh Wnh &n (`ng. [Qi tRng Canvas*&
&!ng &]p hnh Wnh trIn -ut &Ga * trIn -Dn hnh hiTn thU &wa -C3 tvnh+ &x
thT &0i nh 1D -ut @Wng hnh Wnh v3. [T r hn &hng ta !an *Ct hnh
httpBOOtai1i'!ha3.&0-
21=
Lp trnh ha trn Java 2D v 3D
Wnh (i s3+ hnh 1P9 &h ra -Qi !an hE giZa @Wng hnh Wnh fi-ag'
p1at'g vD vU trv &wa -^t+ -ji trzng W0. XU trv &wa -^t 1D ng *a! @Wng
hnh Wnh. [Qi tRng !an *Ct ang tr& @Wng hnh Wnh R& (`ng trIn
@Wng hnh Wnh. XiE& (`ng hnh &ng vv nh &hiJ! -ut Qi tRng !an *Ct
1In @Wng hnh Wnh.
/& Unh @Wng hnh Wnh t tr!ng ts- &wa Si"pe_niverse @an !+
hng -& Unh 1D nhn th'0 trb& +. Tt vU trv nD3 trb& , 1D zng @iIn
ngang &wa @Wng hnh Wnh vi hng (ng 1D @In phWi. Trb& 3 1D &enh
ngang &wa @Wng hnh Wnh vi giC trU (ng hng 1In trIn. Thjng thzng
th vU trv f0+0+0g 1D ts- &wa @Wng hnh Wnh.
Chng trnh Java 5D thjng thzng *Y &h!3Tn iT- nhn ra phva *a!
fhng (ng &wa trb& g T 1D- &h0 Qi tRng y vU trv h0& gn *0 vi vU
trv @an ! giZa hng nhn. Lp Si"pe_niverse &x -ut 1p thDnh viIn
1D Cie1in$Patfor"+ 1p nD3 &x phng tha&
set4o+inal`ieing,ransfor+ &h0 phcp &h!3Tn vU trv &wa -^t nhn ti
tr!ng ts- 1D f0+0+ 2.71g nhn tt phva s- &wa trb& *0 vi vU trv @an !.
LNp Cie1in$Patfor"+ phng tha& set4o+inal`ieing,ransfor+ fg
Pa&;ag'B &0-.*!n.N5(.!ti1*.!niv'r*'
httpBOOtai1i'!ha3.&0-
219
Lp trnh ha trn Java 2D v 3D
Lp Xi'?ingP1at60r- R& *G (bng T thiJt 1p thU nhCnh hnh
tha& &wa thU ;h!ng &Wnh Java 5D vi Qi tRng 2i-p1'4niv'r*'.
Phng tha& nD3 thzng R& *G (bng T ;Jt nQi vi phng tha&
g'tXi'?ingP1at60r- &wa 1p 2i-p1'4niv'r*'.
void set4o+inal`ieing,ransfor+[\
2't t- nhn ;h0Wng &C&h ;h0Wng 2.71 -ct tt tr0ng @iJn i t-
nhn &wa -ut 2i-p1'4niv'r*'. Tei ;h0Wng &C&h nD3 vD th Qi tRng vi
&hi"! &a0 ;h0Wng 2 -ct *0 thT vta vn vi @Wng hnh Wnh.
2a! ;hi te0 ,0ng &C& Qi tRng Canvas*& vD Si"pe_niverse+ @&
tiJp th'0 1D te0 thU nhCnh nui (!ng. F!3 t^& &wa &]! tr& R& t- th]3
tr0ng thU nhCnh hnh tha& f(0 viE& *G (bng 1p Si"pe_niverseg. [
thU nhCnh nui (!ng @iJn i ;hC& nha! tt &hng trnh nD3 Jn &hng
trnh ;hC& (0 x &x thT ,s3 (`ng &hi tiJt tr0ng &jng tha&. [i"! x &x
nghha 1D ;hjng &x nhZng 1p nui (!ng n giWn &h0 @]t &a -ji trzng
nD0 -D @en -!Qn thiJt 1p.
2a! ;hi te0 ,0ng thU nhCnh nui (!ng+ nx R& &hn vD0 -ji trzng *G
(bng phng tha& add2ran&h%raph &wa Si"pe_niverse. Phng tha&
nD3 1]3 -ut in*tan&' &wa BranchGroup nh 1D tha- *Q (!3 nh]t.
BranchGroup nD3 &h R& thI- vD0 nh 1D -ut &0n &wa Qi tRng
Locae R& te0 @yi Si"pe_niverse.
CMc phf;n$ thRc Si"pe_niverse
Pa&;ag'B co".sun.0*d.utis.universe
void add2ran&h%raph[2ran&h%roup 3g\
2G (bng T thI- nt vD0 Qi tRng L0&a1' &wa thU ;h!ng &Wnh
R& te0 @yi 2i-p1'4niv'r*'. [i"! nD3 *G (bng T thI- vD0 -ut thU
nhCnh nui (!ng ti -ji trzng W0.
`ieing!latfor+ get`ieing!latfor+[\
httpBOOtai1i'!ha3.&0-
220
Lp trnh ha trn Java 2D v 3D
2G (bng T 1]3 thjng tin tt Qi tRng Xi'?ingP1at60r- -D
2i-p1'4niv'r*' &h ra. Phng tha& nD3 *G (bng vi phng tha&
*'tS0-ina1Xi'?ingTran*60r- fg &wa 1p Xi'?ingP1at60r- T i"! &hnh
vU trv !an *Ct.
1.= $Vt v3i th9t n"N tr%n" Java <D
Kai th!t ngZ R& nxi tr0ng phn nD3 1D 1iv' vD &0-pi1'(. ihi
&hn -ut thU nhCnh vD0 L0&a1' 1D- &h0 nx &x thT *Qng f1iv'g vD ;Jt
!W 1D -\i Qi tRng &wa thU nhCnh try thDnh *Qng. ShZng Qi tRng
*Qng 1D nhZng Qi tRng -D &h!n @U R& (`ng hnh+ &h0 nIn nhZng
tha- *Q &wa -ut Qi tRng *Qng ;hjng thT tha3 i trt ;hi ;hW nVng
tng ang &wa nx R& thiJt 1p tr& ;hi Qi tRng *Qng f&apa@i1it3 R&
-j tW tr0ng phn 1.=.2g.
ihi &C& Qi tRng BranchGroup R& (U&h f&0-pi1'(g. XiE& (U&h
BrandGroup &h!3Tn Qi tRng BranchGroup vD t]t &W nhZng hnh tha&
* ;hai &wa nx thDnh (eng ph_ hRp T (`ng hnh. /b& v&h &wa &jng viE&
nD3 1D &h!n @U @& &!Qi &_ng tr& ;hi 1D- &h0 Qi tRng x *Qng.
Phng tha&
2ran&e%roup &o+pile [\
`oid &o+pile [\
DU&h ng!n >ran&h)r0!p tng ang vi Qi tRng @ng &C&h te0 vD
E- -ut thU ;h!ng &Wnh R& (U&h.
C *y &wa viE& (U&h vD *Qng R& @ *!ng tr0ng 1p
SceneGraphF,0ect. 2 phng tha& &wa "&ene%raph'3/e&t R& -j tW
(i s3.
Danh *C&h &C& phng tha& & @Wn &wa SceneGraphF,0ect
2&'n')raphM@N'&t 1D 1p & @Wn &wa t]t &W &C& 1p 1sn &n (_ng T te0
thU ;h!ng &Wnh @a0 g- )r0!p+ L'a6+ vD S0('C0-p0n'nt.
httpBOOtai1i'!ha3.&0-
221
Lp trnh ha trn Java 2D v 3D
2&'n')raphM@N'&t &!ng &]p ;hC nhi"! phng tha& vD th!u& tvnh &h0 &C&
1p &0n &wa nx+ 2 phng tha& R& trnh @D3 (i s3.
3oolean is)o+piled[\
TrW v" -ut giC trU &z &h ra ;hi nD0 th n0(' f1D -ut phn &wa thU
;h!ng &Wnh R& (U&hg
3oolean isLive [\
TrW v" giC trU &z &h ra ;hi nD0 n0(' 1D -ut phn &wa thU ;h!ng
&Wnh *Qng
Ch H rng ;hjng &x @& @^t ! (`ng hnh&W tr0ng &jng tha& &
@Wn 1n &jng tha& n giWn nxi y trIn. >u (`ng hnh &wa Java 5D @^t
! &he3 tr0ng -ut vdng 1p vj hen ;hi -ut thU nhCnh &haa -ut
in*tan&' &wa Xi'? @Vt ! *Qng tr0ng -ut -ji trzng W0. ihi @^t !+
@u (`ng hnh Java 5D th`& hiEn h0et ung nh hnh 1P10
?hi1'ftr!'g
Pr0&'** inp!t
$6 fr'!'*t t0 ',itg @r'a;
P'r60r- >'havi0r*
Trav'r*' th' *&'n' graph
an( r'n('r vi*!a1 0@N'&t*
r'*'t23nta,fg
OO %ML &har* ar' in*igni6i&ant in F4#D 6i1'
'01$*2igni6i&antf6a1*'g
?0r(Char*f#+g
OO hav' 2tr'a-T0;'ni'r par*' n!-@'r* f-a;'* (0!@1'Ppr'&i*i0ng
httpBOOtai1i'!ha3.&0-
5<0
Lp trnh ha trn Java 2D v 3D
par*'S!-@'r*fg
OO C0--'nt* @'gin ?ith t0 'n( 06 1in'
&0--'ntCharfg
OO Lhit'*pa&' &hara&t'r* ('1in'at' ?0r(* an( n!-@'r*
OO @1an;*+ ta@*+ an( n'?1in'* ar' ?hit'*pa&' in MM)L
?hit'*pa&'Char*ft+ rg OO ht+ 16+ 66+ vt+ &r
?hit'*pa&'Char*f + g OO *pa&'
OO %n( 06 *'t!p
O g'tT0;'n
)'t* th' n',t t0;'n 6r0- th' *tr'a-. P!t* 0n' 06 th' 60!r
&0n*tant* fTTLM.D+ TTS4/>%.+ TT%ML+ 0r TT%M8g an( th'
t0;'n
va1!' int0 tt3p' t0;'n 0@N'&t.
Th' va1!' 06 thi* -'th0( i* in th' &at&hing 06 ',&'pti0n* in thi*
&'ntra1 10&ati0n.
O
@001'an g'tT0;'nfg
int t
@001'an (0n' 6a1*'
tr3
t n',tT0;'nfg
r't!rn tr!'
httpBOOtai1i'!ha3.&0-
5<1
Lp trnh ha trn Java 2D v 3D
OO %n( 06 g'tT0;'n
OO F!a(8i1'Par*'r &0n*tr!&t0r
F!a(8i1'Par*'rf.'a('r rg
*!p'rfrg
*'t!pfg
OO 'n( 06 F!a(8i1'Par*'r
OO %n( 06 6i1' F!a(8i1'Par*'r.Nava
Ta &x thT th]3 nhZng tha3 i tr0ng &C& phng tha& g'tT0';nfg+
printT0;'nfg .. 1D ;hjng Cng ;T. Sh v3 ta h0Dn thDnh viE&
viJt 1p F!a(8i1'L0a('r+ tiJp th'0 &h!ng *ta &h!3Tn 1In tng trIn+
tng 0@N'&t.
ThOc hiPn tn$ F,0ect
ShiE- vb &wa tng M@N'&t 1D &h!3Tn nhZng t0;'n R& &!ng &]p
@yi tng t0;'ni'r *ang &C& Qi tRng hnh h&.Tng vv (b &wa
&hng ta th i"! nD3 1D n giWn @zi v &hng ta &h &x -ut Qi
tRng hnh h& (!3 nh]t 1D ta (iEn. T!3 nhiIn &hng ta gp phWi
-ut ;hx ;hVn tr0ng viE& ,C& Unh *Q 1Rng Qi tRng hnh h&
R& &!ng &]p.
CC& phng tha& tr0ng 1p 2i-p1'F!a(M@N'&t
Phng tha& ShiE- vb
>001'an
r'a(X'rt',fF!a(8i1'Par*'r *tg
[& nh+ -\i nh @a0 g-
ta u ,+3+ ha3 &C& thjng
tin ;hC& v" -! *^&+ @"
-t
>001'an
r'a(F!a(fF!a(8i1'Par*'r *tg
[& &C& t (iEn @ng &C&h
& &C& nh tt 6i1' F4#D
httpBOOtai1i'!ha3.&0-
5<2
Lp trnh ha trn Java 2D v 3D
X0i(
r'a(F!a(8i1'fF!a(8i1'Par*'r*tg
[& 6i1' F4#D ,C& nhn
&C& th tr0ng 6i1'+ ,C& Unh
tp &C& nh vD & ra &C ta
(iEnfta giC&g
ShiE- vb &wa tng nD3 1D & ra &C& Qi tRng hnh h& tt tp hRp
&C& t0;'n. Tr0ng trzng hRp nD3 &C& Qi tRng hnh h& 1D &C&
nh. Tp &C& nh nD3 R& 1! trZ tr0ng -ut Qi tRng #rra3Li*t.
2G (bng #rra3Li*t &hx phcp viE& tha3 i ;v&h th& &W! -Wng te0
thzi gian th`& hiEn. Tei tng 2&'n'+ Qi tRng ;iT! #rra3Li*t R&
&h!3Tn i *ang -ut #rra3 vD *a! x 1D *ang Qi tRng hnh h&.
Chng ta ,'- ,ct phn &0(' &hw 3J! tr0ng tng M@N'&t. T0Dn @u
phn &0(' 3 w n- tr0ng ',a-p1'.Nar.
i-p0rt F!a(8i1'Par*'r
OO -an3 0th'r i-p0rt* 0-itt'( in t!t0ria1 t',t
p!@1i& &1a** 2i-p1'F!a(M@N'&t
httpBOOtai1i'!ha3.&0-
5<5
Lp trnh ha trn Java 2D v 3D
P0int56 p n'? P0int56fg
*t.g'tT0;'nfg
i6f*t.tt3p' *t.TT%M8g
r't!rn 6a1*' OO r'a&h'( 'n( 06 6i1'
p., f610atg*t.nva1
*t.g'tT0;'nfg
p.3 f610atg*t.nva1
*t.g'tT0;'nfg
p. f610atg*t.nva1
OO #(( thi* v'rt', t0 th' arra3
&00r(Li*t.a((fpg
r't!rn tr!'
OO %n( 06 r'a(X'rt',
O
r'a(F!a( r'a(* 60!r v'rti&'* 06 th' &0rr'&t t3p' f?hi&h in thi*
v'r*i0n i* a1?a3* N!*t &00r(inat' (atag.
O
@001'an r'a(F!a(fF!a(8i1'Par*'r *tg
int v
@001'an r'*!1t 6a1*'
60rfv0 v } 7 vg
r'*!1t r'a(X'rt',f*tg
r't!rn r'*!1t
OO %n( 06 r'a(F!a(
O
r'a(8i1'