Download as pdf or txt
Download as pdf or txt
You are on page 1of 315

Str|p8andunk http]]str|pbandunkcom]

2








WAkNING

8UkU INI nANA UN1Uk LM8ACA ANG 1LLAn MLNGLNAL
S1ANDAk LM8UA1AN ALIkASI MLNGGUNAkAN SWING




Str|p8andunk http]]str|pbandunkcom]
3

Daftar Isi

uafLar lsl 3
uafLar Cambar 7
erslapan 13
Swlng dan AW1 13
ro[ecL SwlngMakeCver 13
ro[ecL SwlngMakeCver dan neL8eans 13
ro[ecL SwlngMakeCver dan Lcllpse 13
!anel 19
emanasan 19
Memanlpulasl palnLComponenL() 19
Menggambar 8enLuk 19
Mewarnal 8enLuk dengan Solld Color 29
Mewarnal 8enLuk dengan CradlenL Color 37
AnLlallaslng 44
Alpha 48
Color 48
ComposlLe 30
lmage 31
Lfek kaca 34
keslmpulan 38
ela[aran 4 !8uLLon 63
Class 63
1ombol koLak Lanclp 63
1ombol koLak Luncul 66
lmage 69
Mouse 72
Cver 72
ress 73
keslmpulan 80
ela[aran 3 !Label 81
urop Shadow 1exL 81
Str|p8andunk http]]str|pbandunkcom]
4

Cllp 1exL 83
CradlenL 1exL 84
ela[aran 6 !1exLlleld 86
Shadow 1exL 86
AuLo CompleLe 1exL 89
Manlpulasl 8ackground 92
CradlenLs 92
lmage 94
valldasl lnpuL 96
keslmpulan 98
ela[aran 7 !Combo8ox 103
8ender 103
8ackground 103
lmage 106
keslmpulan 109
ela[aran 8 !LlsL 113
8ender 113
8ackground 113
lmage 117
8oolean 118
number 120
lonL 122
Model 124
SorLlng 124
lllLer 128
keslmpulan 131
ela[aran 9 !vleworL 133
!1exLArea 133
8ackground lmage 133
Class 139
ela[aran 10 !Wlndow 142
AbouL Screen 142
Splash Screen 144
keslmpulan 147
Str|p8andunk http]]str|pbandunkcom]
3

ela[aran 11 !1ree 149
8ender 149
llle and lolder 149
AbouL lcon 131
Leaf lcon 131
Color 133
8ackground 133
Class 139
LdlLor 162
!Combo8ox 163
!Chek8ox 164
Color 166
llle 169
?es no LdlLor 172
keslmpulan 178
ela[aran 12 !1able 179
8ender 179
Color 179
CradlenL 181
neL8eans 183
LdlLor 200
!Combo8ox 200
!Chek8ox 202
Color 210
Splnner 213
CusLom LdlLor 216
CLher 220
SorLer 220
lllLer 224
MlcrosofL Lxcel dan CpenCfflce Calc 227
P1ML 241
keslmpulan 243
ela[aran 13 !1exLane 246
PlghllghL 246
Str|p8andunk http]]str|pbandunkcom]
6

ela[aran 14 Classane 249
CradlenL Class 249
8lock LvenL 231
Warnlng Classane 233
Classane 1ranslLlon 1 237
Classane 1ranslLlon 2 260
Classane dan !1able 263
uragglng 263
llle 266
lmage 270
ConLalner 273
Show Message 273
Classulalog 279
rogress8ar 282
rogress8ar2 283
keslmpulan 287
ela[aran 13 !Layeredane 288
Classane 293
keslmpulan 296
Sample Swlng Make Cver 297
Lamplran 301
lnsLalasl 301
7Zlp 301
!uk 16 303
!ava uoc 307
neL8eans 60 308
Lcllpse 33 312
1enLang enulls 313


Str|p8andunk http]]str|pbandunkcom]
7

Daftar Cambar
Cambar 1 Menu Llbrarles Lrror! 8ookmark not def|ned
Cambar 2 Llbrary Manager Lrror! 8ookmark not def|ned
Cambar 3 new Llbrary Lrror! 8ookmark not def|ned
Cambar 4 Add !ar / lolder Lrror! 8ookmark not def|ned
Cambar 3 8rowse !ar / lolder Lrror! 8ookmark not def|ned
Cambar 6 Llbrary Manager Lrror! 8ookmark not def|ned
Cambar 7 ro[ecL roperLles Lrror! 8ookmark not def|ned
Cambar 8 ro[ecL roperLles Lrror! 8ookmark not def|ned
Cambar 9 Add Llbrary Lrror! 8ookmark not def|ned
Cambar 10 ro[ecL roperLles Lrror! 8ookmark not def|ned
Cambar 11 ro[ecL Lxplorer Lrror! 8ookmark not def|ned
Cambar 12 Menu references Lrror! 8ookmark not def|ned
Cambar 13 references Lrror! 8ookmark not def|ned
Cambar 14 new user Llbrary Lrror! 8ookmark not def|ned
Cambar 13 references Lrror! 8ookmark not def|ned
Cambar 16 !ar SelecLlon Lrror! 8ookmark not def|ned
Cambar 17 Menu Add Llbrarles Lrror! 8ookmark not def|ned
Cambar 18 Add Llbrary Lrror! 8ookmark not def|ned
Cambar 19 Add Llbrary Lrror! 8ookmark not def|ned
Cambar 20 ackage Lxplorer Lrror! 8ookmark not def|ned
Cambar 21 Menu Cpen ro[ecL 14
Cambar 22 Cpen ro[ecL 14
Cambar 23 ro[ecL Lxplorer 13
Cambar 24 Menu lmporL 13
Cambar 23 lmporL 16
Cambar 26 lmporL 17
Cambar 27 8rowse lor lolder 17
Cambar 28 lmporL 18
Cambar 29 ackage Lxplorer 18
Cambar 30 anelkoLak[ava 21
Cambar 31 anelkoLak2[ava 22
Cambar 32 anel8ound[ava 23
Cambar 33 anel8ound2[ava 24
Cambar 34 anelLlngkaran [ava 26
Cambar 33 anelLlngkaran2[ava 27
Cambar 36 anel8enLukLaln[ava 28
Cambar 37 anelkoLak[ava 30
Cambar 38 anelkoLak2[ava 31
Cambar 39 anel8ound[ava 32
Cambar 40 anel8ound2[ava 33
Cambar 41 anelLlngkaran[ava 33
Cambar 42 anelLlngkaran2[ava 36
Str|p8andunk http]]str|pbandunkcom]
8

Cambar 43 anel8enLukLaln[ava 37
Cambar 44 anelLlnear[ava 39
Cambar 43 anel8adlal[ava 41
Cambar 46 anelLlnearMulLlple[ava 42
Cambar 47 anel8adlalMulLlple[ava 44
Cambar 48 anelLlngkaran sebelum anLlallaslng 44
Cambar 49 anelLlngkaranAnLlallashlng[ava 46
Cambar 30 anelLlnear sebelum anLlallaslng 46
Cambar 31 anelLlnearMulLlpleAnLlallashlng[ava 48
Cambar 32 anelAlpha[ava 49
Cambar 33 anelComposlLe[ava 31
Cambar 34 anellmage[ava 32
Cambar 33 anellmage2[ava 34
Cambar 36 anellmagekaca[ava 36
Cambar 37 anellmagekaca2[ava 38
Cambar 38 MyCpenCfflce Logln 39
Cambar 39 MyCpenCfflce Menu 39
Cambar 60 MyCpenCfflce ConLacL 60
Cambar 61 anelLfecL[ava 62
Cambar 62 8uLLonClass[ava 64
Cambar 63 8uLLonClass2[ava 66
Cambar 64 8uLLonClass8ound[ava 67
Cambar 63 8uLLonClass8ound2[ava 69
Cambar 66 8uLLonlmage[ava 71
Cambar 67 8uLLonlmage menggunakan glass dlaLas 72
Cambar 68 8uLLonCver[ava saaL mouse exlL 73
Cambar 69 8uLLonCver[ava saaL mouse over 73
Cambar 70 8uLLonCverress[ava saaL mouse exlL 79
Cambar 71 8uLLonCverress[ava saaL mouse over 79
Cambar 72 8uLLonCverress[ava saaL mouse press 79
Cambar 73 LabeluropShadow[ava 82
Cambar 74 LabelCllp[ava 84
Cambar 73 LabelCradlenL[ava 83
Cambar 76 ConLoh Shadow 1exL 86
Cambar 77 1exLlleldShadow1exL[ava saaL shadow LexL LerllhaL 89
Cambar 78 1exLlleldShadow1exL[ava saaL user menglnpuLkan Leks 89
Cambar 79 1exLlleldAuLoCompleLe[ava 91
Cambar 80 1exLlleldAuLoCompleLe[ava saaL user menglnpuLkan Leks 91
Cambar 81 1exLlleldAuLoCompleLe unLuk webslLe 92
Cambar 82 1exLlleld8ackground 94
Cambar 83 1exLlleldlmage[ava 96
Cambar 84 1exLlleldlmage[ava saaL user menglnpuLkan Leks 96
Cambar 83 uocumenLlormaLedApp[ava 98
Cambar 86 1exLlleldSLyle[ava 100
Cambar 87 1exLlleldSLyle2[ava 102
Str|p8andunk http]]str|pbandunkcom]
9

Cambar 88 ComboColor[ava 103
Cambar 89 ComboColor2[ava 106
Cambar 90 Combolmage[ava 109
Cambar 91 ComboCradlenL[ava 112
Cambar 92 ComboCradlenL2[ava 114
Cambar 93 LlsLColor[ava 116
Cambar 94 LlsLColor2[ava 117
Cambar 93 LlsL8ackground[ava 118
Cambar 96 LlsL8oolean[ava 120
Cambar 97 LlsLnumber[ava 122
Cambar 98 LlsLlonL[ava 124
Cambar 99 LlsL menggunakan LlsLModelusu saaL keadaan no SC81 127
Cambar 100 LlsL menggunakan LlsLModelusu saaL keadaan ASCLnulnC 127
Cambar 101 LlsL menggunakan LlsLModelusu saaL keadaan uLSCLnulnC 128
Cambar 102 LlsL menggunakan LlsLModelusulllLer saaL Lldak dl fllLer 130
Cambar 103 LlsL menggunakan LlsLModelusulllLer saaL dlfllLer 131
Cambar 104 lonL 8rowser 132
Cambar 103 !vleworL dalam !Scrollane 133
Cambar 106 vleworL1ranparan[ava 133
Cambar 107 vleworLlmage[ava 137
Cambar 108 vleworLlmage[ava 137
Cambar 109 1exLArealmage[ava 139
Cambar 110 1exLArealmage[ava 139
Cambar 111 vleworLlmageClass[ava 141
Cambar 112 ConLoh !Wlndow 142
Cambar 113 WlndowAbouL[ava 144
Cambar 114 WlndowAbouL[ava saaL menampllkan AbouLScreen 144
Cambar 113 WlndowSplashScreen[ava saaL splashscreen 146
Cambar 116 WlndowSplashScreen[ava saaL form muncul 146
Cambar 117 Wlndow1oolLlp[ava 148
Cambar 118 Wlndow1oolLlp[ava saaL wlndow LoolLlp muncul 148
Cambar 119 llle8ender[ava 131
Cambar 120 llle8enderLeaf[ava 133
Cambar 121 1reeColor[ava 133
Cambar 122 1ree8ackground[ava 137
Cambar 123 1ree8ackground[ava 139
Cambar 124 1reeClass[ava 162
Cambar 123 1reeLdlLed[ava 163
Cambar 126 1reeLdlLedCombo8ox[ava 164
Cambar 127 1reeLdlLedChek8ox[ava 166
Cambar 128 1reeColorLdlLor[ava 168
Cambar 129 Color LdlLor 169
Cambar 130 1reellleLdlLor[ava 172
Cambar 131 llle LdlLor 172
Cambar 132 1reellleLdlLor?esno[ava 176
Str|p8andunk http]]str|pbandunkcom]
10

Cambar 133 llle LdlLor 176
Cambar 134 ?es no LdlLor 177
Cambar 133 1reellleLdlLor?esno saaL memlllh nC 177
Cambar 136 1reellleLdlLor?esno saaL memlllh ?LS 178
Cambar 137 1ableColor[ava 181
Cambar 138 1ableCradlenL[ava 183
Cambar 139 anelAlamaL[ava 184
Cambar 140 anelAlamaL2[ava 183
Cambar 141 1ableAlamaL[ava 187
Cambar 142 1ableAlamaL[ava 188
Cambar 143 new llle 190
Cambar 144 new 8ean lorm 191
Cambar 143 new llle 192
Cambar 146 neL8eans Cul 8ullder 192
Cambar 147 Choose 8ean 194
Cambar 148 Choose 8ean 194
Cambar 149 1ampllan Cul 8ullder 194
Cambar 130 1ampllan akhlr render 194
Cambar 131 1ableAlamaLCool[ava 197
Cambar 132 anelvleworL[ava 198
Cambar 133 1ableAlamaLvleworL[ava 200
Cambar 134 1ableLdlLorCombo8ox[ava 202
Cambar 133 1ableLdlLorChek8ox[ava 203
Cambar 136 anel render nama 204
Cambar 137 anel render [enlskelamln 204
Cambar 138 anel render menlkah 204
Cambar 139 1ableLdlLorSLyllsL saaL mengedlL nama 209
Cambar 160 1ableLdlLorSLyllsL saaL mengedlL [enls kelamln 209
Cambar 161 1ableLdlLorSLyllsL saaL mengedlL menlkah 210
Cambar 162 1ableColorLdlLor[ava 212
Cambar 163 Color LdlLor 213
Cambar 164 1ablenumberLdlLor[ava 216
Cambar 163 1ablenumberLdlLor saaL mengedlL umur 216
Cambar 166 anel edlLor alamaL 217
Cambar 167 1ableAlamaLCoolLdlLor[ava 219
Cambar 168 LdlLor AlamaL 220
Cambar 169 1ableSorLer[ava 221
Cambar 170 1ableSorLer saaL LeruruL secara ascendlng 222
Cambar 171 1ableSorLer saaL menguruL secara descendlng 222
Cambar 172 1ableSorLerCood saaL menguruL ascendlng 224
Cambar 173 1ableSorLerCood saaL menguruL descendlng 224
Cambar 174 1ableSorLerlllLer[ava 226
Cambar 173 1ableSorLerlllLer saaL dlfllLer 227
Cambar 176 1ableCSv[ava 230
Cambar 177 Save ulalog 230
Str|p8andunk http]]str|pbandunkcom]
11

Cambar 178 llle CSv 231
Cambar 179 MlcrosofL Cfflve Lxcel 2007 231
Cambar 180 MlcrosofL Cfflce Lxcel 2007 232
Cambar 181 CeL LxLernal uaLa 232
Cambar 182 lmporL 1exL llle 233
Cambar 183 1exL lmporL Wlzard 234
Cambar 184 1exL lmporL Wlzard 233
Cambar 183 1exL lmporL Wlzard 236
Cambar 186 lmporL uaLa 236
Cambar 187 MlcrosofL Cfflce Lxcel 2007 237
Cambar 188 CpenCfflce Calc 238
Cambar 189 Menu Cpen 238
Cambar 190 Cpen ulalog 239
Cambar 191 1exL lmporL 240
Cambar 192 CpenCfflce Calc 240
Cambar 193 1ableP1ML[ava 244
Cambar 194 Save ulalog 244
Cambar 193 llle P1ML 243
Cambar 196 Mozllla llrefox 243
Cambar 197 1exLanePlghLLlghL[ava 248
Cambar 198 1exLanePlghLLlghL saaL hlghLllghL 248
Cambar 199 oslsl Classane 249
Cambar 200 ClassaneCradlenLApp[ava 230
Cambar 201 ClassaneCradlenL2App[ava 231
Cambar 202 lorm yang menggunakan Classane8lock 233
Cambar 203 SaaL form dlblock oleh Classane8lock 233
Cambar 204 Classane8lock2App[ava 233
Cambar 203 Classane8lock2App saaL dlblock 233
Cambar 206 lorm yang menggunakan ClassaneWarnlng 237
Cambar 207 lorm yang menggunakan ClassaneWarnlng 237
Cambar 208 lorm yang menggunakan Classane1ranslLlon 239
Cambar 209 SaaL Classane1ranslLlon memulal Lranslsl 260
Cambar 210 lorm yang menggunakan Classane1ranslLlon8oLasl 262
Cambar 211 SaaL Classane1ranslLlon8oLasl memulal Lranslsl 263
Cambar 212 1able1ranslLlon[ava 263
Cambar 213 1able1ranslLlon saaL memulal Lranslsl 263
Cambar 214 ClassanellleuragApp[ava 269
Cambar 213 ClassanellleuragApp saaL glasspane menampllkan gambar saaL flle dldrag 269
Cambar 216 ClassanellleuragApp saaL flle drag dldrop 270
Cambar 217 ClassanelmageuragApp[ava 274
Cambar 218 ClassanelmageuragApp saaL user mendrag flle gambar 273
Cambar 219 ClassanelmageuragApp saaL user mendrag flle selaln gambar 273
Cambar 220 ClassaneMessageApp[ava 278
Cambar 221 ClassaneMessageApp saaL menampllkan pesan 279
Cambar 222 ClassaneanelApp[ava 281
Str|p8andunk http]]str|pbandunkcom]
12

Cambar 223 ClassaneanelApp saaL menampllkan panel 281
Cambar 224 ClassaneanelApp[ava 282
Cambar 223 ClassanerogressApp[ava 284
Cambar 226 ClassanerogressApp saaL proses progress ber[alan 283
Cambar 227 Classanerogress2App[ava 287
Cambar 228 Classanerogress2App saaL progress ber[alan 287
Cambar 229 oslsl !Layeredane dalam !lrame 288
Cambar 230 SampleLayer[ava 290
Cambar 231 Layerupuown saaL panel merah dlaLas 292
Cambar 232 Layerupuown saaL panel blru dlaLas 292
Cambar 233 LayerClassane[ava 293
Cambar 234 LayerClassane saaL menampllkan pesan 293
Cambar 233 LayerClassane saaL menampllkan progress 296
Cambar 236 lormLogln[ava 297
Cambar 237 lormldenLlLas[ava 298
Cambar 238 noLead[ava 299
Cambar 239 lonL8rowser[ava 300
Cambar 240 1ableMahaslswa[ava 300
Cambar 241 Choose lnsLall LocaLlon 301
Cambar 242 lnsLalllng 302
Cambar 243 CompleLe SeLup 302
Cambar 244 Llcense AgreemenL 303
Cambar 243 CusLom SeLup 304
Cambar 246 lnsLalllng 304
Cambar 247 CusLom SeLup 303
Cambar 248 lnsLalllng !ava 306
Cambar 249 Wlzard CompleLed 306
Cambar 230 LksLrak !avauoc 307
Cambar 231 LxLrak llle 307
Cambar 232 LksLrak llle 308
Cambar 233 roses LksLrak 308
Cambar 234 neL8eans lnsLaller 309
Cambar 233 Llcense AgreemenL 310
Cambar 236 neL8eans luL lnsLallaLlon 311
Cambar 237 Summary 312
Cambar 238 LksLrak Lcllpse !ava 312
Cambar 239 LksLrak llle 313
Cambar 260 roses LksLrak 313
Cambar 261 llle LcllpseLxL 314



Str|p8andunk http]]str|pbandunkcom]
13

Wrsiapan
Sebelum saya mulal men[elaskan menceramahl aLaupun menga[arkan halhal yang saya keLahul
yang mungkln belum anda keLahul aLaupun yang sudah anda keLahul saya akan memberlLahu dulu
LenLang dasar LxLreem Swlng
Swing dan AWT
Swlng sebenarnya adalah sebuah pengembangan darl llbrary Cul AW1 (AbsLracL Wlndow 1oolklL)
oleh karena lLu klLa blsa menemukan meLodemeLode yang ada dl AW1 pada Swlng karena memang
Swlng keLurunan AW1
ualam AW1 mungkln klLa sudah blasa dengan yang mengoverlde meLode palnL() namun dalam
Swlng klLa Lldak dlan[urkan unLuk mengoverlde meLode lnl klLa dlan[urkan unLuk mengoverlde
meLode palnLComponenL()
ad| pe|a[aran bab |n| ada|ah "|ngat [angan mengover|de metode pa|nt() tap| over|de metode
pa|ntComponent()"
Mlsal [lka klLa akan mengoverlde meLode palnLComponenL() sebuah !anel
import jovoowt6rophics
import jovoxswinqlPone/

/**
*
* Qouthor usu
*/
pub/ic c/oss 5omp/ePone/ extends lPone/

QOverride
protected void pointcomponent{6rophics q)
superpointcomponent{q)



ro|WUt SwingMakWbWr
ro[ecL SwlngMakeCver merupakan flle source code unLuk buku lnl Ada 2 versl yalLu unLuk
neL8eans dan Lcllpse
ro|WUt SwingMakWbWr dan NWtBWans
!lka anda menggunakan Lcllpse sllahkan loncaL ke subbab selan[uLnya
Mungkln anda blngung kenapa saya selalu mendahulukan neL8eans darlpada Lcllpse bukan saya Lak
menyukal Lcllpse Lapl karena hamplr 90 pembuaLan source code lnl saya buaL dalam neL8eans
Str|p8andunk http]]str|pbandunkcom]
14

dan selaln lLu neL8eans [uga saLusaLunya luL unLuk Swlng yang blsa dlbllang Lerbalk dlbandlngkan
luL yang lalnnya Lapl kalo soal Code LdlLor ya Lak dapaL dlpungklrl lagl Lcllpse maslh memlmpln
Sebenarnya Lanpa saya buaL LuLorlal lnl anda pun pasLl sudah Lau cara membua sebuah pro[ecL
dalam neL8eans yach lnl slch lLung lLung membuka lembaran baru hehehe
Ck seperLl kebanyakan Apllkasl unLuk membuka sebuah flle pasLl lewaL menu llle uan dalam
neL8eans unLuk membuka ro[ecL anda blla lewaL menu llle Cpen ro[ecL

Gambar 1 Menu Cpen ro[ect
Lalu plllh pro[ecL SwlngMakeCver

Gambar 2 Cpen ro[ect
uan selesal sekarang anda akan mellhaL pro[ecL SwlngMakeCver dl ro[ecL alleLe
Str|p8andunk http]]str|pbandunkcom]
13


Gambar 3 ro[ect Lxp|orer
ro|WUt SwingMakWbWr dan EUipsW
!lka anda menggunakan selaln Lcllpse luL aLau neL8eans luL anda cukup mengcopy pasLe source
code yang ada dalam folder src
ualam Lcllpse unLuk membuka sebuah pro[ecL klLa Lak blsa langsung membuka pro[ecL seperLl yang
dllakukan pada neL8eans Lapl klLa blsa memanfaaLkan meLode lmporL unLuk membuka sebuah
pro[ecL lewaL menu llle lmporL

Gambar 4 Menu Import
Lalu plllh LxlsLlng ro[ecL lnLo Workspace
Str|p8andunk http]]str|pbandunkcom]
16


Gambar S Import
lllh SlecL rooL ulrecLory lalu 8rowse
Str|p8andunk http]]str|pbandunkcom]
17


Gambar 6 Import
lllhlah folder SwlngMakeCver

Gambar 7 8rowse Ior Io|der
Str|p8andunk http]]str|pbandunkcom]
18

uan kllk buLLon llnlsh

Gambar 8 Import
Selesal Sekarang anda blsa mellhaL pro[ecL SwlngMakeCver dl pro[ecL explorer

Gambar 9 ackage Lxp|orer

Str|p8andunk http]]str|pbandunkcom]
19

anW
Wmanasan
Mungkln lnl yang kedua kallnya saya bllang !AnCAn MLnCCvL8luL ML1CuL palnL(Craphlcs) 1Al
CvL8luL ML1CuL palnLComponenL(Craphlcs) Mengapa demlklan karena [lka klLa mengoverlde
meLode palnL(Craphlcs) maka dengan demlklan klLa [uga mengoverlde meLode
palnLComponenL(Craphlcs) palnL8order(Craphlcs) dan palnLChlldren(Craphlcs) kecuall emang anda
lngln mengoverlde seluruh meLode Ladl maka gunakan palnL(Craphlcs)
ada bab lnl klLa akan banyak sekall membahas LenLang menggambar dan mewarnal ualam
palnLComponenL(Craphlcs) klLa blsa melakukan semuanya balk lLu menggambar mewarnal bahkan
memberl efek efek yang mungkln [arang klLa llhaL dalam bahasa pemrograman vlsual yang laln
nah bagalmana LerLarlk bukan? Ck leL's Lx18LLM!
MWmanipuasi paintComponWnt{]
SeperLl yang Lelah saya berlLahu sebelumnya LxLreem Swlng akan banyak sekall menemul dengan
meLode palnLComponenL() karena lnllah salah saLu keleblhan Swlng dlbandlngkan bahasa
pemrograman vlsual lalnnya
MWnggambar BWntuk
Salah saLu yanag blsa klLa lakukan dalam meLode palnLComponenL() adalah menggambar benLuk
balk lLu koLak llngkaran aLau sesuaLl yang klLa lnglnkan uan perlu dlkeLahul parameLer yang
dlgunakan palnLComponenL() adalah Craphlcs namun yang klLa perlukan adalah Craphlcs2u
sehlngga klLa perlu mengconverL Craphlcs men[adl Craphlcs2u
protected void pointcomponent{6rophics q)
superpointcomponent{q)
6rophics2u q2 {6rophics2u) qcreote{)


Selaln lLu unLuk menggambar benLuk dengan Craphlcs2u klLa blsa menggunakan meLode
draw(Shape) sehlngga klLa blsa menggambar seluruh benLuk yang men[adl keLurunan class Shape
seperLl 8ecLangle2u Llllpse2u aLau 8ound8ecLangle2u
Kotuk Iunclp
unLuk membuaL aLau menggambar koLak dalam sebuah !anel klLa blsa membuaLnya dalam meLode
palnLComponenL() uan unLuk membuaL koLak klLa harus menggunakan class 8ecLangle2uuouble
aLau 8ecLangle2ulloaL
unLuk membuaL koLak lanclp gunakan kode dlbawah lnl
protected void pointcomponent{ 6rophics q)
superpointcomponent{q)

Str|p8andunk http]]str|pbandunkcom]
20

kectonq/e2uuoub/e kotok new kectonq/e2uuoub/e{int x int y int /ebor int tinqqi)

6rophics2u q2 {6rophics2u) qcreote{)
q2setco/or{co/or worno)
q2drow{kotok)


anelkoLak[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelKotak extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelKotak());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Rectangle2D.Double kotak = new Rectangle2D.Double(10, 10, 100,
100);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LACK);
g2.draw(kotak);
,
,

Str|p8andunk http]]str|pbandunkcom]
21


Gambar 10 ane|kotak[ava
anelkoLak2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelKotak2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelKotak2());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

Rectangle2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
int y = 0;

while ((height 10) && (width 10)) ,
kotak = new Rectangle2D.Double(x, y, width, height);
final Graphics2D g2 = (Graphics2D) g.create();
Str|p8andunk http]]str|pbandunkcom]
22

g2.setColor(Color.LACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,


Gambar 11 ane|kotak2[ava
Kotuk 1umpul
unLuk membuaL koLak koLak yang u[ungnya Lak lanclp klLa blsa menggunakan class
8ound8ecLangle2u
unLuk membuaL koLak Lumpul gunakan kode dlbawah lnl
protected void pointcomponent{6rophics q)
superpointcomponent{q)

koundkectonq/e2u kotok new koundkectonq/e2uuoub/e{int x int y int /ebor int tinqqi int
roundx int roundy)

6rophics2u q2 {6rophics2u) qcreote{)
q2setco/or{co/or worno)
q2drow{kotok)


anel8ound[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
Str|p8andunk http]]str|pbandunkcom]
23


/
@author usu
/
public class PanelRound extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelRound());
frame.setBounds(100, 100, 300, 200);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final RoundRectangle2D kotak = new RoundRectangle2D.Double(10, 10,
100, 100, 20, 20);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LACK);
g2.draw(kotak);
,
,


Gambar 12 ane|kound[ava
anel8ound2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
Str|p8andunk http]]str|pbandunkcom]
24

import pelajaran1.Frame;

/
@author usu
/
public class PanelRound2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelRound2());
frame.setBounds(100, 100, 300, 200);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

RoundRectangle2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
int y = 0;

while ((height 10) && (width 10)) ,
kotak = new RoundRectangle2D.Double(x, y, width, height, 20, 20);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,


Gambar 13 ane|kound2[ava
Str|p8andunk http]]str|pbandunkcom]
23

Ilngkurun
Sama seperLl halnya membuaL koLak klLa [uga dapaL menggambar llngkaran dl !anel anda dapaL
menggunakan class Llllpse2u
unLuk membuaL llngkaran gunakan kode dlbawah lnl
protected void pointcomponent{6rophics q)
superpointcomponent{q)

//ipse2uuoub/e /inqkoron new //ipse2uuoub/e{int x int y int /ebor int tinqqi)
6rophics2u q2 {6rophics2u) qcreote{)
q2setco/or{co/or worno)
q2drow{/inqkoron)


anelLlngkaran[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelLingkaran extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelLingkaran());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Ellipse2D.Double lingkaran = new Ellipse2D.Double(10, 10, 100,
100);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LACK);
g2.draw(lingkaran);
,
,
Str|p8andunk http]]str|pbandunkcom]
26



Gambar 14 ane|L|ngkaran [ava
anelLlngkaran2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelLingkaran2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new

Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_JN_CLJSE);
frame.add(new PanelLingkaran2());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

Ellipse2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
Str|p8andunk http]]str|pbandunkcom]
27

int y = 0;

while ((height 10) && (width 10)) ,
kotak = new Ellipse2D.Double(x, y, width, height);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.BLACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,


Gambar 1S ane|L|ngkaran2[ava
Wntuk Iuln
Selaln koLak aLau llngkaran anda [uga blsa menggambar benLuk sesual dengan yang anda lnglnkan
anda dapaL menggunakan class CeneralaLh
protected void pointcomponent{6rophics q)
superpointcomponent{q)

6enero/Poth poth new 6enero/Poth{)
pothmove1o{int x int y) // titik owo/ poth
poth
poth
pothc/osePoth{) // menutup poth

6rophics2u q2 {6rophics2u) qcreote{)
q2setco/or{co/or worno)
q2drow{poth)


anel8enLukLaln[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
Str|p8andunk http]]str|pbandunkcom]
28

import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelBentukLain extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelBentukLain());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LACK);
g2.draw(path);
,
,


Gambar 16 ane|8entukLa|n[ava
Str|p8andunk http]]str|pbandunkcom]
29

erlu dlkeLahul unLuk membuaL CeneralaLh klLa harus menenLukan LlLlk awal dulu dengan
menggunakan meLode move1o(xy) karena [lka Lldak menggunakannya maka akan Ler[adl Lrror dan
unLuk menuLup CeneralaLh gunakan meLode closeaLh() sehlngga LlLlk Lerakhlr paLh akan oLomaLls
dlsambungkan dengan LlLlk awal karena [lka Lldak maka paLh akan Lerbuka
MWwarnai BWntuk dWngan Soid Coor
unLuk mewarnal benLuk balk lLu koLak aLaupun llngkaran klLa cukup menggunakan meLode
flll(Shape) mlllk Craphlcs2u
Kotuk Iunclp
Cunakan kode unLuk membuaL koLak lalu berl meLode flll()
PanelKotak.java
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelKotak extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelKotak());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Rectangle2D.Double kotak = new Rectangle2D.Double(10, 10, 100,
100);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.#ED);
g2.fill(kotak);
g2.setColor(Color.LACK);
g2.draw(kotak);
,
,

Str|p8andunk http]]str|pbandunkcom]
30


Gambar 17 ane|kotak[ava
anelkoLak2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.Random;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelKotak2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelKotak2());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private final Random generator = new Random();

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

Rectangle2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
int y = 0;

Str|p8andunk http]]str|pbandunkcom]
31

while ((height 10) && (width 10)) ,
kotak = new Rectangle2D.Double(x, y, width, height);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(this.generator.nextInt(255), this.generator
.nextInt(255), this.generator.nextInt(255)));
g2.fill(kotak);
g2.setColor(Color.LACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,


Gambar 18 ane|kotak2[ava
Kotuk 1umpul
Cunakan kode unLuk membuaL koLak 8ound lalu berl meLode flll()
anel8ound[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelRound extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
Str|p8andunk http]]str|pbandunkcom]
32

frame.add(new PanelRound());
frame.setBounds(100, 100, 300, 200);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final RoundRectangle2D kotak = new RoundRectangle2D.Double(10, 10,
100, 100, 20, 20);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.#ED);
g2.fill(kotak);
g2.setColor(Color.LACK);
g2.draw(kotak);
,
,


Gambar 19 ane|kound[ava
anel8ound2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import java.util.Random;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelRound2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,
Str|p8andunk http]]str|pbandunkcom]
33


public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelRound2());
frame.setBounds(100, 100, 300, 200);
frame.setVisible(true);
,
,);
,

private final Random generator = new Random();

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

RoundRectangle2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
int y = 0;

while ((height 10) && (width 10)) ,
kotak = new RoundRectangle2D.Double(x, y, width, height, 20, 20);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(this.generator.nextInt(255), this.generator
.nextInt(255), this.generator.nextInt(255)));
g2.fill(kotak);
g2.setColor(Color.LACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,


Gambar 20 ane|kound2[ava
Ilngkurun
Cunakan kode unLuk membuaL llngkaran lalu berl meLode flll()
Str|p8andunk http]]str|pbandunkcom]
34

anelLlngkaran[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelLingkaran extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelLingkaran());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Ellipse2D.Double lingkaran = new Ellipse2D.Double(10, 10, 100,
100);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.#ED);
g2.fill(lingkaran);
g2.setColor(Color.LACK);
g2.draw(lingkaran);
,
,

Str|p8andunk http]]str|pbandunkcom]
33


Gambar 21 ane|L|ngkaran[ava
anelLlngkaran2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.util.Random;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelLingkaran2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelLingkaran2());
frame.setVisible(true);
,
,);
,

private final Random generator = new Random();

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

Ellipse2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
int y = 0;

Str|p8andunk http]]str|pbandunkcom]
36

while ((height 10) && (width 10)) ,
kotak = new Ellipse2D.Double(x, y, width, height);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(this.generator.nextInt(255), this.generator
.nextInt(255), this.generator.nextInt(255)));
g2.fill(kotak);
g2.setColor(Color.LACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,


Gambar 22 ane|L|ngkaran2[ava
Wntuk Iuln
Cunakan kode unLuk menggambar benLuk laln lalu Lambahkan meLode flll()
anel8enLukLaln[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelBentukLain extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
Str|p8andunk http]]str|pbandunkcom]
37

frame.add(new PanelBentukLain());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.#ED);
g2.fill(path);
g2.setColor(Color.LACK);
g2.draw(path);
,
,


Gambar 23 ane|8entukLa|n[ava
MWwarnai BWntuk dWngan CradiWnt Coor
Mungkln saaL lnl [lka klLa memberl warna laLar sebuah !anel dengan warna solld blsa dlbllang sudah
kuno SaaL lnl apllkasl leblh menon[olkan efek 3u dlbandlngkan efek 2u [adl mau gak mau klLa harus
menggunakan warna gradlenL unLuk memunculkan efek 3u
IlnWur 0ruJlWnt
unLuk membuaL llnear gradlenL gunakan kode dlbawah lnl
protected void pointcomponent{6rophics q)
superpointcomponent{q)

5hope poth // 8uot bentuk yonq okon diwornoi

Str|p8andunk http]]str|pbandunkcom]
38

6rodientPoint point new 6rodientPoint{int x1 int y1 co/or worno1int x2 int y2 co/or
worno)

6rophics2u q2 {6rophics2u) qcreote{)
q2setPoint{point)
q2fi//{poth)


anelLlnear[ava
package pelajaran3;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelLinear extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelLinear());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final GradientPaint paint = new GradientPaint(10, 10, Color.#ED,
getWidth() - 10, 10,
Color.LUE);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
Str|p8andunk http]]str|pbandunkcom]
39

g2.fill(path);
g2.setColor(Color.LACK);
g2.draw(path);
,
,


Gambar 24 ane|L|near[ava
uJlul 0ruJlWnt
unLuk membuaL gradlenL llngkaran anda dapaL menggunakan kode seperLl dlbawah
protected void pointcomponent{6rophics q)
superpointcomponent{q)

5hope poth // 8uot bentuk

Point center
f/oot rodius
f/oot froctions
co/or co/ors
kodio/6rodientPoint point new kodio/6rodientPoint{center rodius froctions co/ors)

6rophics2u q2 {6rophics2u) qcreote{)
q2setPoint{point)
q2fi//{poth)


anel8adlal[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RadialGradientPaint;
import java.awt.geom.GeneralPath;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
Str|p8andunk http]]str|pbandunkcom]
40


import pelajaran1.Frame;

/
@author usu
/
public class PanelRadial extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelRadial());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final Point center = new Point(getWidth() / 2, getHeight() / 2);
final float radius = 100;
final float, fractions = new float, , 0.0F, 1.0F ,;
final Color, colors = new Color, , Color.#ED, Color.LUE ,;
final RadialGradientPaint paint = new RadialGradientPaint(center,
radius, fractions, colors);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fill(path);
g2.setColor(Color.LACK);
g2.draw(path);
,
,

Str|p8andunk http]]str|pbandunkcom]
41


Gambar 2S ane|kad|a|[ava
ultlplW IlnWur 0ruJlWnt
kadang andan perlu membuaL llnear gradlenL dengan banyak warna unLuk membuaLnya anda blsa
menggunakan kode seperLl dlbawah lnl
protected void pointcomponent{6rophics q)
superpointcomponent{q)

5hope poth

Point stort
Point end
f/oot froctions
co/or co/ors
Lineor6rodientPoint point new Lineor6rodientPoint{stort end froctions co/ors)

fino/ 6rophics2u q2 {6rophics2u) qcreote{)
q2setPoint{point)
q2fi//{poth)



anelLlnearMulLlple[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.Point;
import java.awt.geom.GeneralPath;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import pelajaran1.Frame;

/
Str|p8andunk http]]str|pbandunkcom]
42

@author usu
/
public class PanelLinearMultiple extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelLinearMultiple());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final Point start = new Point(10, 10);
final Point end = new Point(getWidth() - 10, 10);
final float, fractions = new float, , 0.0F, 0.5F, 1.0F ,;
final Color, colors = new Color, , Color.#ED, Color.LUE,
Color.YELLOW ,;
final LinearGradientPaint paint = new LinearGradientPaint(start, end,
fractions, colors);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fill(path);
g2.setColor(Color.LACK);
g2.draw(path);
,
,


Gambar 26 ane|L|nearMu|t|p|e[ava
Str|p8andunk http]]str|pbandunkcom]
43

ultlplW uJlul 0ruJlWnt
SeperLl halnya membuaL llnear gradlenL dengan banyak warna anda pun pasLl kadang memerlukan
warna radlel gradlenL yang leblh darl dua warna uan unLuk membuaLnya sama halnya seperLl
membuaL gambar dengan radlal gradlenL namun dengan menggunakan floaL fracLlons leblh darl
dua dan Color colors leblh darl dua
anel8adlalMulLlple[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RadialGradientPaint;
import java.awt.geom.GeneralPath;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import pelajaran1.Frame;

/
@author usu
/
public class PanelRadialMultiple extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelRadialMultiple());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final Point center = new Point(getWidth() / 2, getHeight() / 2);
final float radius = getHeight();
final float, fractions = new float, , 0.0F, 0.5F, 1.0F ,;
final Color, colors = new Color, , Color.#ED, Color.LUE,
Color.YELLOW ,;
final RadialGradientPaint paint = new RadialGradientPaint(center,
Str|p8andunk http]]str|pbandunkcom]
44

radius, fractions, colors);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fill(path);
g2.setColor(Color.LACK);
g2.draw(path);
,
,


Gambar 27 ane|kad|a|Mu|t|p|e[ava
Antiaiasing
Sebenarnya subbab lnl blsa dlbllang kelan[uLan darl subbab Memanupulasl palnLComponenL()"
karena memang subbab lnl sangaL LerkalL dengan subbab sebelumnya
Mungkln anda yang serlng memalnkan Came C Lelah mengenal kaLa anLlallaslng aLau dengan kaLa
laln memperLa[am gambar dengan cara memberl sedlklL efek blur conLoh gambar yang belum klLa
berl anLlallashlng adalah gamba gambar yang Ladl klLa buaL dalam subbab sebelumnya

Gambar 28 ane|L|ngkaran sebe|um ant|a||as|ng
1erllhaL dengan [elas kalo plnglran gambar llngkaran Ladl Lldak halus karena memang belum dlberl
anLlallashlng Sehlngga unLuk memberl kehalusan pada gambar klLa perlu memberl efek anLlallaslng
pada gambar LersebuL
unLuk membuaL anLlallashln Cn gunakan
Str|p8andunk http]]str|pbandunkcom]
43

q2setkenderinqnint{kenderinqnintskY_4N1l4Ll45lN6kenderinqnintsv4Lu_4N1l4Ll45_ON)

anelLlngkaranAnLlallashlng[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelLingkaranAntialiashing extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelLingkaranAntialiashing());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Ellipse2D.Double lingkaran = new Ellipse2D.Double(10, 10, 100,
100);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.#ED);
g2.fill(lingkaran);
g2.setColor(Color.LACK);
g2.draw(lingkaran);
,
,

Str|p8andunk http]]str|pbandunkcom]
46


Gambar 29 ane|L|ngkaranAnt|a||ash|ng[ava
Sekarang anda blsa mellhaL perbedaan gambar sebelum dan seLelah dlberl efek anLlallashlng
ConLoh laln
Sebelum dlberl efek anLlallaslng

Gambar 30 ane|L|near sebe|um ant|a||as|ng
anelLlnearMulLlpleAnLlallashlng[ava
package pelajaran3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import pelajaran1.Frame;

/
@author usu
/
public class PanelLinearMultipleAntialiashing extends JPanel ,

Str|p8andunk http]]str|pbandunkcom]
47

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelLinearMultipleAntialiashing());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GeneralPath path = new GeneralPath();
path.moveTo(10, 10);
path.lineTo(10, getHeight() - 10);
path.curveTo(10, getHeight() - 10, getWidth() / 2, 10, getWidth() -
10, getHeight() - 10);
path.lineTo(getWidth() - 10, 10);
path.closePath();

final Point start = new Point(10, 10);
final Point end = new Point(getWidth() - 10, 10);
final float, fractions = new float, , 0.0F, 0.5F, 1.0F ,;
final Color, colors = new Color, , Color.#ED, Color.LUE,
Color.YELLOW ,;
final LinearGradientPaint paint = new LinearGradientPaint(start, end,
fractions, colors);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(path);
g2.setColor(Color.LACK);
g2.draw(path);
,
,

SeLelah dlberl efek anLlallaslng
Str|p8andunk http]]str|pbandunkcom]
48


Gambar 31 ane|L|nearMu|t|p|eAnt|a||ash|ng[ava
Apba
Alpha yang saya maksud adalah Leknlk unLuk membuaL gambar aLau warna men[adl Lranparan
Sebenarnya ada 2 Leknlk yang perLama adalah dengan memanlpulasl warna (Color) LersebuL dan
yang kedua adalah dengan menggunakan ComposlLe
Coor
Sebelumnya klLa harus Lahu unLuk membuaL ob[ecL Color dengan mengaLur alpha ada dua
konsLrukLor
co/or worno new co/or{int red int qreen int b/ue int o/pho)

uengan keLenLuan bahwa nllal seLlap parameLer Lldak leblh darl 233 dan Lak kurang darl 0 dan
semakln kecll nllal parameLer alpha maka warna akan semakln Lranparan
co/or worno new co/or{f/oot red f/oot qreen f/oot b/ue f/oot o/pho)

uengan keLenLuan bahwa nllal seLlap parameLer Lldak leblh darl 1l dan Lak kurang darl 0l sama
seperLl konsLrukLor sebelumnya semakln kecll nllal alphanya maka warna akan semakln Lranparan
anelAlpha[ava
package pelajaran3;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
Str|p8andunk http]]str|pbandunkcom]
49

public class PanelAlpha extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelAlpha());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Rectangle2D.Double kotak = new Rectangle2D.Double(0, 0,
getWidth(), getHeight());
final Rectangle2D.Double kotak2 = new Rectangle2D.Double(10, 10,
getWidth() - 20,
getHeight() - 20);

final Color dark = new Color(0F, 0F, 0F, 0F);
final Color light = new Color(1F, 0F, 0F, 0.5F);

final GradientPaint paint = new GradientPaint(10, 10, dark, 10,
getHeight() - 20, light);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LUE);
g2.fill(kotak);
g2.setPaint(paint);
g2.fill(kotak2);
,
,


Gambar 32 ane|A|pha[ava
Anda blsa mellhaL pada Color dark saya buaL alphanya bernllal 0l sehlngga warna LersebuL
dlperllhaLkan secara Lranparan LerganLung nllal alphanya
Str|p8andunk http]]str|pbandunkcom]
30

CompositW
Selaln dengan memanlpulasl warna anda [uga blsa menggunakan ComposlLe pada Craphlcs2u
unLuk menggunakan ComposlLe gunakan kode dlbawah lnl
q2setcomposite{4/phocomposite5rcOverderive{f/oot vo/ue))

anelComposlLe[ava
package pelajaran3;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import pelajaran1.Frame;

/
@author usu
/
public class PanelComposite extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new PanelComposite());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Rectangle2D.Double kotak = new Rectangle2D.Double(0, 0,
getWidth(), getHeight());
final Rectangle2D.Double kotak2 = new Rectangle2D.Double(10, 10,
getWidth() - 20,
getHeight() - 20);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.LUE);
g2.fill(kotak);
g2.setComposite(AlphaComposite.SrcOver.derive(0.5F));
g2.setPaint(Color.#ED);
g2.fill(kotak2);
,
Str|p8andunk http]]str|pbandunkcom]
31

,


Gambar 33 ane|Compos|te[ava
uengan memberl nllal AlphaComposlLe 03l maka warna merah akan dlLampllkan Lranparan 30
LerganLung nllal alpha
erlu dlkeLahul! 8erhaLl haLllah dalam penempaLan AlphaComposlLe Saya menempaLkan
seLComposlLe() sebelum seLalnL(Color8Lu) sehlngga dengan demlklan gambar sebelumnya Lak
akan dlberl efek Lranparan sedangkan seLelah pemanggllan meLode seLComposlLe() maka gambar
akan dlberl efek Lranparan sesual dengan LlngkaL Lranparansl yang klLa berlkan
ImagW
Selaln menggambar benLuk benLuk yang dalam [ava dlbllang Shape klLa [uga dapaL menggambar
ob[ek lmage uan seperLl pen[elasan subbab sebelumnya hal lnlpun Lak lupuL darl meLode
palnLComponenL()
protected void pointcomponent{fino/ 6rophics q)
superpointcomponent{q)

6rophics2u q2 {6rophics2u) qcreote{)
q2drowlmoqe{lmoqe qombor int x int y lmoqeObserver observer)



anellmage[ava
package pelajaran3;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

Str|p8andunk http]]str|pbandunkcom]
32

/
@author usu
/
public class PanelImage extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 300);
frame.add(new PanelImage());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Image gambar = new
ImageIcon(getClass().getResource("/pelajaran3/My Computer.png"))
.getImage();

final Graphics2D g2 = (Graphics2D) g.create();
g2.drawImage(gambar, 10, 10, null);

,
,


Gambar 34 ane|Image[ava
anellmage2[ava
package pelajaran3;

import java.awt.Color;
Str|p8andunk http]]str|pbandunkcom]
33

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.Random;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelKotak2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 300, 200);
frame.add(new PanelKotak2());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private final Random generator = new Random();

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

Rectangle2D.Double kotak = null;

int height = getHeight();
int width = getWidth();
int x = 0;
int y = 0;

while ((height 10) && (width 10)) ,
kotak = new Rectangle2D.Double(x, y, width, height);
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(this.generator.nextInt(255), this.generator
.nextInt(255), this.generator.nextInt(255)));
g2.fill(kotak);
g2.setColor(Color.LACK);
g2.draw(kotak);
x += 10;
y += 10;
height -= 20;
width -= 20;
,
,
,

Str|p8andunk http]]str|pbandunkcom]
34


Gambar 3S ane|Image2[ava
EfWk KaUa
kall lnl saya akan memberl Lahu cara yang sangaL berguna yalLu efek kaca unLuk gambar 8uaLlah
class LfekCambar seperLl yang ada dlbawah lnl
LfekCambar[ava
package pelajaran3;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;

/
@author usu
/
public final class EfekGambar ,

public static final BufferedImage getBuffered(final Image source) ,
final int width = source.getWidth(null);
final int height = source.getHeight(null);
final BufferedImage dest = new BufferedImage(width, height,
BufferedImage.TYPE_INT_A#G);

final Graphics2D g2 = (Graphics2D) dest.getGraphics();
g2.drawImage(source, 0, 0, null);
g2.dispose();

return dest;
,

public static final BufferedImage getEfekKaca(final BufferedImage
source) ,

Str|p8andunk http]]str|pbandunkcom]
33

final BufferedImage dest = new BufferedImage(source.getWidth(),
source.getHeight()
+ source.getHeight() / 2, BufferedImage.TYPE_INT_A#G);

final Graphics2D g2 = (Graphics2D) dest.getGraphics();
g2.drawImage(source, 0, 0, null);
g2.scale(1, -1);
g2.drawImage(source, 0, -source.getHeight() 2, null);
g2.scale(1, -1);
g2.translate(0, source.getHeight());
g2.setPaint(new GradientPaint(0, 0, new Color(1f, 1f, 1f, 0.3f), 0,
source.getHeight() / 2,
new Color(1f, 1f, 1f, 0f)));
g2.setComposite(AlphaComposite.DstIn);
g2.fillRect(0, 0, source.getWidth(), source.getHeight());
g2.dispose();

return dest;
,

public static final BufferedImage getEfekKaca(final Image source) ,
return EfekGambar.etEfekKaca(EfekGambar.et:ffered(source));
,
,

Class dlaLas dlgunakan sebagal class llbrary unLuk efek kaca mlsal klLa akan merubah gambar panel
yang Ladl sebelumnya klLa gambar
protected void pointcomponent{fino/ 6rophics q)
superpointcomponent{q)

6rophics2u q2 {6rophics2u) qcreote{)
q2drowlmoqe{fek6omborqetfekkoco{lmoqe qombor) int x int y lmoqeObserver observer)


anellmagekaca[ava
package pelajaran3;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelImageKaca extends JPanel ,

public static void main(final String, usu) ,
Str|p8andunk http]]str|pbandunkcom]
36

SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 300);
frame.add(new PanelImageKaca());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Image gambar = new
ImageIcon(getClass().getResource("/pelajaran3/AIM.png")).getImage();

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(0, 0, Color.LUE, 0,
gambar.getHeight(null), Color.LACK));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.drawImage(EfekGambar.etEfekKaca(gambar), 10, 10, null);

,
,


Gambar 36 ane|Imagekaca[ava
anellmagekaca2[ava
package pelajaran3;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
Str|p8andunk http]]str|pbandunkcom]
37

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class PanelImageKaca2 extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 300);
frame.add(new PanelImageKaca2());
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Image gambar = new ImageIcon(getClass().getResource(
"/pelajaran3/My Computer.png")).getImage();

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(0, 0, Color.LUE, 0,
gambar.getHeight(null), Color.LACK));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.drawImage(EfekGambar.etEfekKaca(gambar), 10, 10, null);

,
,

Str|p8andunk http]]str|pbandunkcom]
38


Gambar 37 ane|Imagekaca2[ava
KWsimpuan
Mungkln anda berLanya Lanya apakah penLlng unLuk mengeLahul cara mengambar dan mewarnal
dalam !anel unLuk membuaL apllkasl berbasls Swlng
?a LenLu sa[a!!! SaaL lnl [arang sekall klLa Lemukan apllkasl yang memlllkl Lampllan sLandar seperLl
[aman keLlka klLa menggunakan Wlndows 98 yang sangaL kaku SaaL lnl klLa perlu membuaL apllkasl
yang selaln powerfull Lapl [uga memlllkl daya Larlk aLau memlllkl kemewahan dalam desaln mlsal
sa[a saya pernah membuaL apllkasl MyCpenCfflce
Str|p8andunk http]]str|pbandunkcom]
39


Gambar 38 MyCpenCff|ce Log|n

Gambar 39 MyCpenCff|ce Menu
Str|p8andunk http]]str|pbandunkcom]
60


Gambar 40 MyCpenCff|ce Contact
uan unLuk membuaL Lampllan apllkasl seperLl dlaLas klLa harus menguasal Leknlk menggambar dan
mewarnal dalam !anel
Sebenarnya selaln dl !anel anda [uga blsa membuaL gambar hamplr dlsemua componenL Swlng
dengan mengoverlde meLode palnLComponenL() balk lLu dalam !buLLon !Label aLaupun dalam
componenL componenL swlng lalnnya
uarl pen[elasan Ladl dlaLas anda sudah blsa membuaL !anel yang memlllkl efek efek yang
memukau conLohnya
anelLfecL[ava
package pelajaran3;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
Str|p8andunk http]]str|pbandunkcom]
61

public class PanelEfect extends JPanel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setBounds(100, 100, 400, 400);
frame.add(new PanelEfect());
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

GradientPaint paint = new GradientPaint(0, 0, Color.LACK, 0,
getHeight(), Color.#ED);

g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());

final int width = getWidth();
final int height = getHeight() 5 / 100;

final Color light = new Color(1F, 1F, 1F, 0.5F);
final Color dark = new Color(1F, 1F, 1F, 0.0F);

paint = new GradientPaint(0, 0, light, 0, height, dark);
GeneralPath path = new GeneralPath();
path.moveTo(0, 0);
path.lineTo(0, height);
path.curveTo(0, height, width / 2, height / 2, width, height);
path.lineTo(width, 0);
path.closePath();

g2.setPaint(paint);
g2.fill(path);

paint = new GradientPaint(0, getHeight(), light, 0, getHeight() -
height, dark);
path = new GeneralPath();
path.moveTo(0, getHeight());
path.lineTo(0, getHeight() - height);
path.curveTo(0, getHeight() - height, width / 2, getHeight() - height
/ 2, width, getHeight()
- height);
path.lineTo(width, getHeight());
path.closePath();

g2.setPaint(paint);
g2.fill(path);
,
,
Str|p8andunk http]]str|pbandunkcom]
62



Gambar 41 ane|Lfect[ava

Str|p8andunk http]]str|pbandunkcom]
63

Button
Cass
Tombo Kotak LanUip
Salah saLu Leknlk yang dapaL membuaL !8uLLon LerllhaL leblh lndah adalah efek glass uan sekall lagl
unLuk membuaL efek glass klLa perlu mengoverlde meLode palnLComponenL()
8uLLonClass[ava
package pelajaran4;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ButtonGlass extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new FlowLayout());
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
panel.add(new ButtonGlass("TJMBJL"));
frame.setVisible(true);
,
,);
,

public ButtonGlass(final String title) ,
super(title);
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);
Str|p8andunk http]]str|pbandunkcom]
64


final GradientPaint paint = new GradientPaint(0, 0, light, 0,
getHeight(), dark);

final Rectangle2D.Double kotak = new Rectangle2D.Double(0, 0,
getWidth(), getHeight());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,
,


Gambar 42 8uttonG|ass[ava
8uLLonClass2[ava
package pelajaran4;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran3.PanelEfect;

/
@author usu
/
public class ButtonGlass2 extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
Str|p8andunk http]]str|pbandunkcom]
63

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new PanelEfect();
panel.setLayout(null);
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
final ButtonGlass2 glass = new ButtonGlass2("TJMBJL");
panel.add(glass);
glass.setBounds(100, 100, 100, 25);
frame.setVisible(true);
,
,);
,

public ButtonGlass2(final String title) ,
super(title);
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);

final GradientPaint paint = new GradientPaint(0, 0, light, 0,
getHeight(), dark);

final Rectangle2D.Double kotak = new Rectangle2D.Double(0, 0,
getWidth(),
getHeight());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,
,

Str|p8andunk http]]str|pbandunkcom]
66


Gambar 43 8uttonG|ass2[ava
SaLu hal yang harus dllngaL dalam pembuaLan !8uLLon glass adalah merubah aLau menghapus
gambar !8uLLon sebelumnya dengan cara
setlocusPointed{fo/se)
set8orderPointed{fo/se)
setcontent4reoli//ed{fo/se)

Tombo Kotak LunUu
kadang menggunakan buLLon berbenLuk koLak agak LerllhaL kaku sehlngga unLuk membuaLnya Lldak
kaku saya sarankan unLuk membuaL buLLon berbenLuk round
8uLLonClass8ound[ava
package pelajaran4;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ButtonGlassRound extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,
Str|p8andunk http]]str|pbandunkcom]
67


public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new FlowLayout());
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
panel.add(new ButtonGlassRound("TJMBJL"));
frame.setVisible(true);
,
,);
,

public ButtonGlassRound(final String title) ,
super(title);
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);

final GradientPaint paint = new GradientPaint(0, 0, light, 0,
getHeight(), dark);

final RoundRectangle2D.Double kotak = new RoundRectangle2D.Double(0,
0, getWidth(),
getHeight(), getHeight(), getHeight());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,
,


Gambar 44 8uttonG|asskound[ava
Str|p8andunk http]]str|pbandunkcom]
68

8uLLonClass8ound2[ava
package pelajaran4;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran3.PanelEfect;

/
@author usu
/
public class ButtonGlassRound2 extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new PanelEfect();
panel.setLayout(null);
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
final ButtonGlassRound2 glass = new
ButtonGlassRound2("TJMBJL");
panel.add(glass);
glass.setBounds(100, 100, 100, 25);
frame.setVisible(true);
,
,);
,

public ButtonGlassRound2(final String title) ,
super(title);
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);

final GradientPaint paint = new GradientPaint(0, 0, light, 0,
getHeight(), dark);

final RoundRectangle2D.Double kotak = new RoundRectangle2D.Double(0,
0,
getWidth(), getHeight(), getHeight(), getHeight());

Str|p8andunk http]]str|pbandunkcom]
69

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,
,


Gambar 4S 8uttonG|asskound2[ava
ImagW
Mungkln semuanya sudah Lahu kalo unLuk menampllkan gambar dalam !8uLLon klLa hanya perlu
menggunakan meLode seLlcon() namun yang saya maksudkan adalah menampllkan gambar dengan
efek kaca seperLl pada pela[aran !anel sebelumnya
8ufferedlmoqe imoqe fek6omborqetfekkoco{lmoqe qombor)
8uttonsetlcon{new lmoqelcon{imoqe))

8uLLonlmage[ava
package pelajaran4;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
Str|p8andunk http]]str|pbandunkcom]
70

import pelajaran3.EfekGambar;

/
@author usu
/
public class ButtonImage extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new FlowLayout());
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
panel.add(new ButtonImage());
frame.pack();
frame.setVisible(true);
,
,);
,

public ButtonImage() ,
super();
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
final ImageIcon icon = new
ImageIcon(getClass().getResource("/pelajaran3/AIM.png"));
final BufferedImage image = EfekGambar.etEfekKaca(icon.getImage());
setIcon(new ImageIcon(image));
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);

final GradientPaint paint = new GradientPaint(0, 0, light, 0,
getHeight(), dark);

final RoundRectangle2D.Double kotak = new RoundRectangle2D.Double(0,
0, getWidth(),
getHeight(), 50, 50);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,
,

Str|p8andunk http]]str|pbandunkcom]
71


Gambar 46 8uttonImage[ava
ada kode dlaLas saya membuaL gambar dl leLakan dl aLas glass hal lnl karena saya memanggll
meLode superpalnLComponenL() dl uruLan pallng bawah sehlngga gambar darl !8uLLon akan dl
gambar dlaLas !8uLLon Class kecuall anda memballkkan leLaknya
QOverride
protected void pointcomponent{6rophics q)
superpointcomponent{q)

co/or /iqht new co/or{1l 1l 1l 07l)
co/or dork new co/or{1l 1l 1l 0l)

6rodientPoint point new 6rodientPoint{0 0 /iqht 0 qetneiqht{) dork)

koundkectonq/e2uuoub/e kotok new koundkectonq/e2uuoub/e{0 0 qetwidth{)
qetneiqht{) 50 50)

6rophics2u q2 {6rophics2u) qcreote{)
q2setkenderinqnint{kenderinqnintskY_4N1l4Ll45lN6
kenderinqnintsv4Lu_4N1l4Ll45_ON)
q2setPoint{point)
q2fi//{kotok)


Str|p8andunk http]]str|pbandunkcom]
72


Gambar 47 8uttonImage menggunakan g|ass d|atas
MousW
Salah saLu perbedaan !8uLLon dengan !anel adalah lnLerakslnya dengan Mouse keLlka mouse
dlLekan aLau keLlka mouse dlaLas !8uLLon blasanya Lampllan !8uLLon berubah sehlngga [lka klLa
membuaL buLLon seperLl buLLon buLon sebelumnya maka akan LerllhaL kaku
bWr
Salah saLu lnLeraksl dengan mouse adalah keLlka mouse dlaLas buLLon (over) dan agar
mempermudah klLa sewakLu kodlng maka klLa harus membuaL meLode yang mengecek apakah
mouse ada dlaLas !8uLLon aLau Lldak
privote boo/eon over

privote boo/eon isOver{)
return over


privote void setOver{boo/eon vo/ue)
over vo/ue


Lalu Lambahkan mouse llsLener
oddMouseListener{new Mouse4dopter{)

pub/ic void mousentered{fino/ Mousevent e)
setOver{true)


pub/ic void mousexited{fino/ Mousevent e)
setOver{fo/se)

)
Str|p8andunk http]]str|pbandunkcom]
73


8uLLonCver[ava
package pelajaran4;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran3.EfekGambar;

/
@author usu
/
public class ButtonJver extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new FlowLayout());
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
panel.add(new ButtonJver());
frame.pack();
frame.setVisible(true);
,
,);
,

private boolean over;

public ButtonJver() ,
super();
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
final ImageIcon icon = new
ImageIcon(getClass().getResource("/pelajaran3/AIM.png"));
final BufferedImage image = EfekGambar.etEfekKaca(icon.getImage());
setIcon(new ImageIcon(image));
setJver(false);
addMouseListener(new MouseAdapter() ,

@Jverride
Str|p8andunk http]]str|pbandunkcom]
74

public void mouseEntered(final MouseEvent e) ,
setJver(true);
,

@Jverride
public void mouseExited(final MouseEvent e) ,
setJver(false);
,
,);
,

public boolean isJver() ,
return this.over;
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);

GradientPaint paint = null;

if (this.over) ,
paint = new GradientPaint(0, 0, dark, 0, getHeight(), light);
, else ,
paint = new GradientPaint(0, 0, light, 0, getHeight(), dark);
,

final RoundRectangle2D.Double kotak = new RoundRectangle2D.Double(0,
0, getWidth(),
getHeight(), 50, 50);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,

public void setJver(final boolean over) ,
this.over = over;
repaint();
,
,

keLlka mouse keluar darl buLLon dan masuk ke buLLon
Str|p8andunk http]]str|pbandunkcom]
73


Gambar 48 8uttonCver[ava saat mouse ex|t

Gambar 49 8uttonCver[ava saat mouse over
rWss
Selaln lnLeraksl keLlka mose over klLa [uga perlu melakukan lnLeraksl keLlka mouse dl press (Lekan)
privote boo/eon press
privote boo/eon over

privote boo/eon isPress{)
return press


privote void setPress{boo/eon vo/ue)
press vo/ue


privote boo/eon isOver{)
return over


Str|p8andunk http]]str|pbandunkcom]
76

privote void setOver{boo/eon vo/ue)
over vo/ue


uan [angan lupa menambahkan mouse llsLener
oddMouseListener{new Mouse4dopter{)

pub/ic void mousentered{fino/ Mousevent e)
setOver{true)


pub/ic void mousexited{fino/ Mousevent e)
setOver{fo/se)


pub/ic void mousePressed{fino/ Mousevent e)
setPress{true)


pub/ic void mouseke/eosed{fino/ Mousevent e)
setPress{fo/se)

)

8uLLonCverress[ava
package pelajaran4;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran3.EfekGambar;

/
@author usu
/
public class ButtonJverPress extends JButton ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,
Str|p8andunk http]]str|pbandunkcom]
77


public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new FlowLayout());
panel.setBackground(Color.#ED);
frame.add(panel);
frame.setBounds(100, 100, 300, 200);
panel.add(new ButtonJverPress());
frame.pack();
frame.setVisible(true);
,
,);
,

private boolean over;

private boolean press;

public ButtonJverPress() ,
super();
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
final ImageIcon icon = new
ImageIcon(getClass().getResource("/pelajaran3/AIM.png"));
final BufferedImage image = EfekGambar.etEfekKaca(icon.getImage());
setIcon(new ImageIcon(image));
setJver(false);
addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseEntered(final MouseEvent e) ,
setJver(true);
,

@Jverride
public void mouseExited(final MouseEvent e) ,
setJver(false);
,

@Jverride
public void mousePressed(final MouseEvent e) ,
setPress(true);
,

@Jverride
public void mouseReleased(final MouseEvent e) ,
setPress(false);
,
,);
,

public boolean isJver() ,
return this.over;
,

public boolean isPress() ,
return this.press;
,

Str|p8andunk http]]str|pbandunkcom]
78

@Jverride
protected void paintComponent(final Graphics g) ,
final Color light = new Color(1F, 1F, 1F, 0.7F);
final Color dark = new Color(1F, 1F, 1F, 0F);

GradientPaint paint = null;

if (this.over) ,
if (this.press) ,
paint = new GradientPaint(0, 0, light, 0, getHeight(), light);
, else ,
paint = new GradientPaint(0, 0, dark, 0, getHeight(), light);
,
, else ,
paint = new GradientPaint(0, 0, light, 0, getHeight(), dark);
,

final RoundRectangle2D.Double kotak = new RoundRectangle2D.Double(0,
0, getWidth(),
getHeight(), 50, 50);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(paint);
g2.fill(kotak);

super.paintComponent(g);
,

public void setJver(final boolean over) ,
this.over = over;
repaint();
,

public void setPress(final boolean press) ,
this.press = press;
repaint();
,
,

keLlka mouse dlluar buLLon dlaLas buLLon dan Lak dlkllk dan dlaLas buLLon dan dlkllk
Str|p8andunk http]]str|pbandunkcom]
79


Gambar S0 8uttonCverress[ava saat mouse ex|t

Gambar S1 8uttonCverress[ava saat mouse over

Gambar S2 8uttonCverress[ava saat mouse press
Str|p8andunk http]]str|pbandunkcom]
80

KWsimpuan
unLuk !8uLLon mau gak mau anda harus membuaL aLau memanlpulasl gambar yang dapaL
berlnLeraksl dengan Mouse agar hasll manlpulasl !8uLLon anda benar benar LerllhaL seperLl
!8uLLon
ConLoh conLoh dlaLas hanyalah sebaglan kecll darl daya kreaLlvlLas anda [adl berkreasllah unLuk
membuaL LxLreem !8uLLon

Str|p8andunk http]]str|pbandunkcom]
81

LabW
Drop Sbadow TWt
kadang klLa hanya membuaaL !Label sebagal label blasa namun sebenarnya klLa [uga dapaL
membuaL label label yang luar blasa conLohnya klLa akan membuaL label dengan drop shadow
LabeluropShadow[ava
package pelajaran5;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class LabelDropShadow extends JLabel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 200);
final LabelDropShadow label = new LabelDropShadow();
label.setText("Eko Kurniawan");
label.setFont(label.getFont().deriveFont(50F));
label.setDistance(2);
frame.add(label);
frame.setVisible(true);
,
,);
,

private int distance;

private Color dropShadowColor;

public LabelDropShadow() ,
super();
setDistance(3);
setForeground(Color.G#AY);
setDropShadowColor(Color.LACK);
,

public int getDistance() ,
return this.distance;
,
Str|p8andunk http]]str|pbandunkcom]
82


public Color getDropShadowColor() ,
return this.dropShadowColor;
,

@Jverride
public Dimension getPreferredSize() ,
final Dimension d = super.getPreferredSize();
d.height += getDistance();
d.width += getDistance();
return d;
,

@Jverride
protected void paintComponent(final Graphics g) ,
final FontMetrics metric = getFontMetrics(getFont());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setFont(getFont());
g2.setColor(getDropShadowColor());
g2.drawString(getText(), getDistance(), metric.getHeight() +
getDistance());
g2.setColor(getForeground());
g2.drawString(getText(), 0, metric.getHeight());
,

public void setDistance(final int distance) ,
this.distance = distance;
,

public void setDropShadowColor(final Color dropShadowColor) ,
this.dropShadowColor = dropShadowColor;
,
,


Gambar S3 Labe|DropShadow[ava
keslmpulannya unLuk membuaL uropShadow klLa hanya perlu menggambar Leks dua kall dengan
[arak bayangan sesual dlsLance yang Lelah dlLenLukan uan unLuk menggambar Leks klLa hanya perlu
menggunakan meLode drawSLrlng() pada class Craphlcs2u seperLl yang LerllhaL dlbawah lnl
QOverride
protected void pointcomponent{6rophics q)
lontMetrics metric qetlontMetrics{qetlont{))

Str|p8andunk http]]str|pbandunkcom]
83

6rophics2u q2 {6rophics2u) qcreote{)
q2setkenderinqnint{kenderinqnintskY_1x1_4N1l4Ll45lN6
kenderinqnintsv4Lu_1x1_4N1l4Ll45_ON)
q2setlont{qetlont{))
q2setco/or{qeturop5hodowco/or{))
q2drow5trinq{qet1ext{) qetuistonce{) metricqetneiqht{) + qetuistonce{))
q2setco/or{qetloreqround{))
q2drow5trinq{qet1ext{) 0 metricqetneiqht{))


Cip TWt
Sekarang klLa akan membuaL !Label yang dlgunakan sebagal label cllp gambar
LabelCllp[ava
package pelajaran5;

import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class LabelClip extends JLabel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 400);
final LabelClip clip = new LabelClip("EKJ KURNIAWAN");
clip.setFont(clip.getFont().deriveFont(50F));
clip
.setImage(new
ImageIcon(getClass().getResource("/pelajaran9/image.jpg"))
.getImage());
frame.add(clip);
frame.pack();
frame.setVisible(true);
,
,);
,

Str|p8andunk http]]str|pbandunkcom]
84

private Image image;

public LabelClip(final String text) ,
super(text);
,

public Image getImage() ,
return this.image;
,

@Jverride
protected void paintComponent(final Graphics g) ,
if (getImage() != null) ,
final FontMetrics metric = getFontMetrics(getFont());

final Graphics2D g2 = (Graphics2D) g.create();

final FontRenderContext context = g2.getFontRenderContext();
final TextLayout layout = new TextLayout(getText(), getFont(),
context);
final AffineTransform tarnsform =
AffineTransform.etTranslateInstance(0, 50);
final Shape outline = layout.getJutline(tarnsform);
g2.setClip(outline);
for (int i = 0; i < getWidth(); i += getImage().getWidth(null)) ,
for (int j = 0; j < getHeight(); j +=
getImage().getHeight(null)) ,
g2.drawImage(getImage(), 0, 0, null);
,
,
, else ,
super.paintComponent(g);
,
,

public void setImage(final Image image) ,
this.image = image;
repaint();
,
,


Gambar S4 Labe|C||p[ava
So yang pasLl unLuk membuaL cllp Llnggal menggunakan meLode seLCllp(Shape) mlllk Craphlcs2u
CradiWnt TWt
kall lnl klLa akan mencoba membuaL !Label yang berwarna gradlenL sehlngga Leks yang dlLampllkan
oleh !Label leblh menarlk unLuk dlllhaL dlbandlngkan dengan warna solld (saLu warna)
LabelCradlenL[ava
Str|p8andunk http]]str|pbandunkcom]
83

package pelajaran5;

import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class LabelGradient extends JLabel ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 200);
final LabelGradient label = new LabelGradient();
label.setText("Eko Kurniawan");
label.setFont(label.getFont().deriveFont(50F));
frame.add(label);
frame.pack();
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
final FontMetrics metric = getFontMetrics(getFont());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(0, 0, Color.#ED, getWidth(), 0,
Color.LUE));
g2.drawString(getText(), 0, metric.getHeight() -
metric.getDescent());
,
,


Gambar SS Labe|Grad|ent[ava
Sama seperLl pada componenL componenL lalnnya unLuk membuaL Leks yang berwarna gradlenL
gunakan seLalnL(alnL)
Str|p8andunk http]]str|pbandunkcom]
86

TWtFiWd
Sbadow TWt
Maksud darl shadow LexL adalah semacam LoolLlp yang LerLulls dalam !1exLlleld lLu sendlrl seperLl
conLoh dlbawah lnl

Gambar S6 Contoh Shadow 1ext
!lka user belum memasukkan Leks maka !1exLlleld akan menampllkan Leks berupa LoolLlp aLau
perlnLah
1exLlleldShadow1exL[ava
package pelajaran6;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class TextFieldShadowText extends JTextField ,

public static void main(final String, usu) ,
try ,

UIManager.setLookAndFeel(UIManager.etSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new FlowLayout());
Str|p8andunk http]]str|pbandunkcom]
87

final TextFieldShadowText text = new TextFieldShadowText();
text.setColumns(30);
text.setShadowText("SHADJW TEXT");
frame.add(text);

frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new JButton("TJMBJL"));
frame.pack();
frame.setVisible(true);
,
,);
, catch (final ClassNotFoundException ex) ,

Logger.etLoer(TextFieldShadowText.class.getName()).log(Level.SEVE#E,
null, ex);
, catch (final InstantiationException ex) ,

Logger.etLoer(TextFieldShadowText.class.getName()).log(Level.SEVE#E,
null, ex);
, catch (final IllegalAccessException ex) ,

Logger.etLoer(TextFieldShadowText.class.getName()).log(Level.SEVE#E,
null, ex);
, catch (final UnsupportedLookAndFeelException ex) ,

Logger.etLoer(TextFieldShadowText.class.getName()).log(Level.SEVE#E,
null, ex);
,
,

private Color defaultColorText;
private boolean shadow;
private String shadowText;

private Color shadowTextColor;

public TextFieldShadowText() ,
super();
this.defaultColorText = getForeground();
setShadow(true);
setDefaultColorText(getForeground());
setShadowTextColor(Color.G#AY);
addFocusListener(new FocusAdapter() ,

@Jverride
public void focusGained(final FocusEvent e) ,
if (isShadow()) ,
setText("");
setForeground(getDefaultColorText());
,
,

@Jverride
public void focusLost(final FocusEvent e) ,
setShadow(false);
if (getText().length() < 1) ,
setForeground(getShadowTextColor());
setShadow(true);
setText(getShadowText());
, else ,
setShadow(false);
Str|p8andunk http]]str|pbandunkcom]
88

setForeground(getDefaultColorText());
,
,
,);
,

public Color getDefaultColorText() ,
return this.defaultColorText;
,

public String getShadowText() ,
return this.shadowText;
,

public Color getShadowTextColor() ,
return this.shadowTextColor;
,

@Jverride
public String getText() ,
if (isShadow()) ,
return "";
,
return super.getText();
,

public boolean isShadow() ,
return this.shadow;
,

public void setDefaultColorText(final Color defaultColorText) ,
this.defaultColorText = defaultColorText;
,

@Jverride
@Deprecated
public void setForeground(final Color fg) ,
super.setForeground(fg);
,

public void setShadow(final boolean shadow) ,
this.shadow = shadow;
,

public void setShadowText(final String shadowText) ,
this.shadowText = shadowText;
,

public void setShadowTextColor(final Color shadowTextColor) ,
this.shadowTextColor = shadowTextColor;
,
,

SaaL !1exLlleld berum Lerlsl Leks maka akan ada Lullsan SPAuCW 1Lx1" anda blsa merubahnya
dengan menggunakan
textset5hodow1ext{5n4uOw 1x1)

Str|p8andunk http]]str|pbandunkcom]
89


Gambar S7 1extI|e|dShadow1ext[ava saat shadow text ter||hat
uan [lka !1exLlleld Lelah dllsl Leks maka Lullsan SPAuCW 1Lx1" Lak akan muncul

Gambar S8 1extI|e|dShadow1ext[ava saat user meng|nputkan teks
Auto CompWtW TWt
kadang klLa serlng menemul sebuah 1exLlleld yang menggunakan auLo compleLe LexL sehlngga
keLlka klLa mengeLlkkan sebaglan Leks maka secara oLomaLls 1exLlleld akan menampllkan Leks yang
menyerupal Leks yang klLa lnpuLkan
8uaLlah model unLuk auLocompleLe
AuLoCompleLe[ava
package pelajaran6;

/
@author usu
/
public interface AutoComplete ,

public String getAutoComplete(String key);

,

8uaL defaulL model unLuk auLocompleLe
uefaulLAuLoCompleLe[ava
package pelajaran6;

import java.util.ArrayList;
import java.util.Arrays;

/
@author usu
/
public class DefaultAutoComplete implements AutoComplete ,

private final ArrayList<String data;

public DefaultAutoComplete(final String, data) ,
this.data = new ArrayList<String(Arrays.<String asList(data));
,
Str|p8andunk http]]str|pbandunkcom]
90


public boolean add(final String e) ,
return this.data.add(e);
,

public String getAutoComplete(final String key) ,
for (final String i : this.data) ,
if (i.startsWith(key)) ,
return i;
,
,
return null;
,

public boolean remove(final Jbject o) ,
return this.data.remove(o);
,
,

1exLlleldAuLoCompleLe[ava
package pelajaran6;

import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.text.BadLocationException;
import pelajaran1.Frame;

/
@author usu
/
public class TextFieldAutoComplete extends JTextField ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();

final TextFieldAutoComplete text = new TextFieldAutoComplete();
text.setColumns(30);

final String, data =
GraphicsEnvironment.etLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
final DefaultAutoComplete autoComplete = new
DefaultAutoComplete(data);

text.setAutoComplete(autoComplete);

frame.setLayout(new FlowLayout());
frame.add(text);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
Str|p8andunk http]]str|pbandunkcom]
91

frame.setVisible(true);
,
,);
,

private AutoComplete autoComplete;

public TextFieldAutoComplete() ,
super();
addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
setCaretPosition(getDocument().getLength());
,
,);
,

public AutoComplete getAutoComplete() ,
return this.autoComplete;
,

@Jverride
public void replaceSelection(final String content) ,
if (getAutoComplete() == null) ,
super.replaceSelection(content);
, else ,
try ,
super.replaceSelection(content);
final String full = getDocument().getText(0,
getDocument().getLength());
if (getAutoComplete().getAutoComplete(full) != null) ,
setText(getAutoComplete().getAutoComplete(full));
setCaretPosition(getDocument().getLength());
moveCaretPosition(full.length());
,
, catch (final BadLocationException ex) ,
// Error
,
,
,

public void setAutoComplete(final AutoComplete autoComplete) ,
this.autoComplete = autoComplete;
,
,


Gambar S9 1extI|e|dAutoComp|ete[ava

Gambar 60 1extI|e|dAutoComp|ete[ava saat user meng|nputkan teks
Str|p8andunk http]]str|pbandunkcom]
92

keLlka user mengeLlkkan 1lm" maka secara oLomaLls akan keluar LexL auLo compleLe 1lmes new
8oman" yang merupakan kaLa LerdekaL dengan kaLa 1lm"
keslmpulannya LerdapaL pada seLAuLoCompleLe()
Mlsal klLa lngln membuaL LexL auLo compleLe unLuk alamaL webslLe
1extlie/d4utocomp/ete text new 1extlie/d4utocomp/ete{)
textsetco/umns{l0)

5trinq doto new 5trinq
http//wwwqooq/ecom/
http//wwwyohoocom/
http//wwwnetbeonsorq/
http//wwwec/ipseorq

uefou/t4utocomp/ete outocomp/ete new uefou/t4utocomp/ete{doto)

textset4utocomp/ete{outocomp/ete)


Gambar 61 1extI|e|dAutoComp|ete untuk webs|te
Manipuasi BaUkground
Mungkln klLa serlng merubah laLar !1exLlleld dengan menggunakan meLode seL8ackground(Color)
namun lLu hanya blsa merubah warna solld 8agalmana [lka klLa lngln menggunakan warna
background gradlen aLau gambar
CradiWnts
klLa Lelah bela[ar unLuk membuaL berbagal macam gradlen Ladl dalam pela[aran !anel sehlngga
pada pela[aran lnl klLa blsa langsung prakLekan
QOverride
protected void pointcomponent{6rophics q)
if {isOpoque{))
setOpoque{fo/se)


// /okukon menqqombor bockqround disini

superpointcomponent{q)


Ada sedlklL Lrlk unLuk menampllkan gambar yang Lelah klLa buaL yalLu dengan menggunakan
Str|p8andunk http]]str|pbandunkcom]
93

if {isOpoque{))
setOpoque{fo/se)


Mengapa hal lnl dlperlukan karena [lka Lldak maka gambar yang Lelah klLa buaL akan hllang
Sebenarnya klLa [uga blsa Lanpa menggunakan Lrlk LersebuL namun dengan cara memballkkan
kodenya
QOverride
protected void pointcomponent{6rophics q)
superpointcomponent{q)

// /okukon menqqombor bockqround disini



namun [lka anda menggunakan kode lnl anda harus menanggung reslko kalo border Lak akan
dlLampllkan dan Leks Lak akan dlLampllkan karena gambarnya LerLlmpa oleh gambar yang klLa buaL
[adl saya menyarankan unLuk menggunakan Leknlk perLama
Sekarang mlsal klLa akan membuaL !1exLlleld dengan background gradlen
1exLlleld8ackground[ava
package pelajaran6;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
import pelajaran1.Frame;

/
@author usu
/
public class TextFieldBackground extends JTextField ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new FlowLayout());
final TextFieldBackground text = new TextFieldBackground();
text.setColumns(30);
text.setForeground(Color.hite);
text.setBorder(new LineBorder(Color.LACK, 1));
frame.add(text);
frame.pack();
Str|p8andunk http]]str|pbandunkcom]
94

frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

@Jverride
protected void paintComponent(final Graphics g) ,
if (isJpaque()) ,
setJpaque(false);
,

final GradientPaint paint = new GradientPaint(0, 0, Color.#ED,
getWidth(), 0, Color.LUE);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());

super.paintComponent(g);
,
,


Gambar 62 1extI|e|d8ackground
ImagW
Selaln menggunakan background gradlenL klLa [uga blsa menggunakan background gambar yang
dapaL klLa LenLukan sendlrl uan unLuk membuaL background gambar caranya mlrlp dengan
menggambar dl !anel namun dengan sedlklL Lrlk looplng dalam proses penggambaran
1exLlleldlmage[ava
package pelajaran6;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
import pelajaran1.Frame;

/
@author usu
/
public class TextFieldImage extends JTextField ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,
Str|p8andunk http]]str|pbandunkcom]
93


public void run() ,
final Frame frame = new Frame();
frame.setLayout(new FlowLayout());

final TextFieldImage text = new TextFieldImage();
text.setColumns(30);
text.setBorder(new LineBorder(Color.LACK, 1));

final Image gambar = new ImageIcon(TextFieldImage.class
.getResource("/pelajaran6/Bunga.jpg")).getImage();
text.setGambar(gambar);

frame.add(text);
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private Image gambar;

public TextFieldImage() ,
super();
,

public Image getGambar() ,
return this.gambar;
,

@Jverride
protected void paintComponent(final Graphics g) ,
if (isJpaque()) ,
setJpaque(false);
,

if (getGambar() != null) ,
for (int i = 0; i <= getWidth(); i += getGambar().getWidth(null))
,
for (int j = 0; j < getHeight(); j +=
getGambar().getHeight(null)) ,
g.drawImage(getGambar(), i, j, null);
,
,
,

super.paintComponent(g);
,

public void setGambar(final Image gambar) ,
this.gambar = gambar;
repaint();
,
,

Str|p8andunk http]]str|pbandunkcom]
96


Gambar 63 1extI|e|dImage[ava

Gambar 64 1extI|e|dImage[ava saat user meng|nputkan teks
Mengapa dalam Leknlk penggambaran klLa memerlukan Lrlk seperLl lnl
if {qet6ombor{) ! nu//)
for {int i 0 i qetwidth{) i + qet6ombor{)qetwidth{nu//))
for {int j 0 j qetneiqht{) j + qet6ombor{)qetneiqht{nu//))
qdrowlmoqe{qet6ombor{) i j nu//)




Alasannya adalah karena gambar yang klLa [adlkan background belum LenLu luasnya sesual dengan
luas !1exLlleld sehlngga klLa menggunakan Lrlk looplng agar seluruh area !1exLlleld dapaL Lerlsl
penuh dengan gambar
aidasi Input
ualam Swlng klLa mengenal !lormaLed1exLlleld yang berguna sebagal LexLbox yang memlllkl
kemampuan unLuk memformaL Leks yang dllnpuLkan oleh user 1apl selaln lLu !1exLlleld pun dapaL
klLa gunakan unLuk memvalldasl LexL yang dllnpuLkan
Sebenarnya bukan !1exLlleldnya yang klLa gunakan unLuk memvalldasl Lapl uocumenL mlllk
!1exLlleldnya !lka anda Lldak Lau apa lLu uocumenL uocumenL adalah class yang dlgunakan unLuk
menampung daLa Leks yang dlmlllkl oleh !LexLComponenL
8uaL documenL baru
uocumenLlormaLed[ava
package pelajaran6;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/
@author usu
/
public class DocumentFormated extends PlainDocument ,

public DocumentFormated() ,
Str|p8andunk http]]str|pbandunkcom]
97

super();
,

@Jverride
public void insertString(final int offs, final String str, final
AttributeSet a)
throws BadLocationException ,

final char, array = str.toCharArray();
boolean valid = false;

for (final char c : array) ,
if (Character.isDiit(c)) ,
valid = true;
, else ,
valid = false;
break;
,
,

if (valid) ,
super.insertString(offs, str, a);
, else ,
// DI BLJKIR
,
,
,

Mlsal klLa akan memvalldasl Leks yang berupa nomor sehlngga [lka bukan nomor maka lnpuL Leks
aLau dlbloklr
QOverride
pub/ic void insert5trinq{int offs 5trinq str 4ttribute5et o) throws 8odLocotionxception

chor orroy strtochor4rroy{)
boo/eon vo/id fo/se

for {chor c orroy)
if {chorocterisuiqit{c))
vo/id true
e/se
vo/id fo/se
breok



if{vo/id)
superinsert5trinq{offs str o)
e/se
// ul 8LOklk



uocumenLlormaLedApp[ava
Str|p8andunk http]]str|pbandunkcom]
98

package pelajaran6;

import java.awt.FlowLayout;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class DocumentFormatedApp ,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());

final JTextField text = new JTextField();
text.setColumns(30);
text.setDocument(new DocumentFormated());
frame.add(text);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
,
,


Gambar 6S DocumentIormatedApp[ava
Sekarang [lka anda menglnpuLkan Leks yang selaln nomber maka !1exLlleld Lak akan menerlma lnpuL
LersebuL
KWsimpuan
Sebenarnya saya blngung kalo seLlap pela[aran harus menarlk keslmpulan karena menuruL saya
keslmpulan seLlap orang lLu berbeda beda [adl yang pasLl anda blsa slmpulkan sendlrl darl
pela[aran dlaLas
uan unLuk memanclng daya kreasl anda saya lamplrkan conLoh !1exLlleld yang dapaL saya buaL darl
pela[aran pela[aran dlaLas
1exLlleldSLyle[ava
package pelajaran6;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
Str|p8andunk http]]str|pbandunkcom]
99

import java.awt.geom.RoundRectangle2D;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.EmptyBorder;
import pelajaran1.Frame;

/
@author usu
/
public class TextFieldStyle extends JTextField ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());

final TextFieldStyle text = new TextFieldStyle();
text.setColumns(30);
text.setHorizontalAlignment(SwingConstants.CENTE#);
frame.add(text);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
,
,);
,

public TextFieldStyle() ,
super();
setBorder(new EmptyBorder(3, 3, 3, 3));
,

@Jverride
protected void paintComponent(final Graphics g) ,

if (isJpaque()) ,
setJpaque(false);
,

final RoundRectangle2D.Double round = new RoundRectangle2D.Double(0,
0, getWidth(),
getHeight(), getHeight(), getHeight());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

GradientPaint paint = new GradientPaint(0, 0, Color.-lack, 0,
getHeight(), Color.red);

g2.setPaint(paint);
g2.fill(round);

final Color dark = new Color(1F, 1F, 1F, 0F);
final Color light = new Color(1F, 1F, 1F, 0.5F);
Str|p8andunk http]]str|pbandunkcom]
100


paint = new GradientPaint(0, 0, light, 0, getHeight(), dark);
g2.setPaint(paint);
g2.fill(round);

g2.setColor(Color.LACK);
g2.draw(round);

super.paintComponent(g);

,
,


Gambar 66 1extI|e|dSty|e[ava
1exLlleldSLyle2[ava
package pelajaran6;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.EmptyBorder;
import pelajaran1.Frame;
import pelajaran3.PanelEfect;

/
@author usu
/
public class TextFieldStyle2 extends JTextField ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());

final TextFieldStyle2 text = new TextFieldStyle2();
text.setColumns(30);
text.setHorizontalAlignment(SwingConstants.CENTE#);
frame.setSize(400, 300);
Str|p8andunk http]]str|pbandunkcom]
101

frame.setContentPane(new PanelEfect());
frame.getContentPane().setLayout(null);
frame.getContentPane().add(text);

final Dimension dim = frame.getSize();
final Dimension dim2 = new Dimension(200, 25);
final Rectangle r = new Rectangle();
r.setLocation(new Point(((dim.width - dim2.width) / 2),
(dim.height) / 2 - dim2.height));
r.setSize(dim2);

text.setBounds(r);

frame.setLocationRelativeTo(null);
frame.setVisible(true);
,
,);
,

public TextFieldStyle2() ,
super();
setBorder(new EmptyBorder(3, 3, 3, 3));
,

@Jverride
protected void paintComponent(final Graphics g) ,

if (isJpaque()) ,
setJpaque(false);
,

final RoundRectangle2D.Double round = new RoundRectangle2D.Double(0,
0, getWidth(), getHeight(), getHeight(), getHeight());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

GradientPaint paint = new GradientPaint(0, 0, Color.-lack, 0,
getHeight(), Color.red);

g2.setPaint(paint);
g2.fill(round);

final Color dark = new Color(1F, 1F, 1F, 0F);
final Color light = new Color(1F, 1F, 1F, 0.5F);

paint = new GradientPaint(0, 0, light, 0, getHeight(), dark);
g2.setPaint(paint);
g2.fill(round);

super.paintComponent(g);

,
,

Str|p8andunk http]]str|pbandunkcom]
102


Gambar 67 1extI|e|dSty|e2[ava

Str|p8andunk http]]str|pbandunkcom]
103

Wa|aran
ComboBo
RWndWr
Salah saLu kea[alban swlng adalah faslllLas render yang dlmlllkl !Combo8ox !1ree !LlsL dan !Lable
uengan adanya faslllLas 8ender klLa blsa memanlpulasl Lampllan darl componenL componenL
LersebuL
BaUkground
kall lnl klLa akan memanlpulasl laLar combo berdasarkan genap aLau gan[ll unLuk membuaL hal
LersebuL klLa harus membuaL Cell8ender sendlrl unLuk menseL render ke !Combo8ox gunakan kode
dlbawah
lcombo8ox combo new lcombo8ox{)
combosetkenderer{Listce//kenderer render)

Color8ender[ava
package pelajaran7;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class ColorRender implements ListCellRenderer ,

public Component getListCellRendererComponent(final JList list, final
Jbject value,
final int index, final boolean isSelected, final boolean
cellHasFocus) ,

final JLabel label = new JLabel(value.toString());
label.setJpaque(true);

if (isSelected) ,
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
, else ,
label.setForeground(list.getForeground());
if (index % 2 == 0) ,
label.setBackground(Color.G#EEN);
, else ,
label.setBackground(Color.YELLOW);
,
,

return label;
Str|p8andunk http]]str|pbandunkcom]
104

,
,

Sekarang Llnggal menggunakan cell render LersebuL ke !Combo8ox
ComboColor[ava
package pelajaran7;

import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ComboColor ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new FlowLayout());

final String, data =
GraphicsEnvironment.etLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
final DefaultComboBoxModel model = new
DefaultComboBoxModel(data);

final JComboBox combo = new JComboBox();
combo.setModel(model);
combo.setRenderer(new ColorRender());

frame.add(combo);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
,
,);
,
,

Str|p8andunk http]]str|pbandunkcom]
103


Gambar 68 ComboCo|or[ava
Color8ender8andom[ava
package pelajaran7;

import java.awt.Color;
import java.awt.Component;
import java.util.Random;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class ColorRenderRandom implements ListCellRenderer ,

private final Random generator = new Random();

public Component getListCellRendererComponent(final JList list,
final Jbject value, final int index, final boolean isSelected,
final boolean cellHasFocus) ,
final JLabel label = new JLabel(value.toString());
label.setJpaque(true);

if (isSelected) ,
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
, else ,
label.setForeground(list.getForeground());
label.setBackground(new Color(this.generator.nextInt(255),
this.generator.nextInt(255), this.generator.nextInt(255)));
,

return label;
,
,

ComboColor2[ava
package pelajaran7;

Str|p8andunk http]]str|pbandunkcom]
106

import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ComboColor2 ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new FlowLayout());

final String, data = GraphicsEnvironment

.etLocalGraphicsEnvironment().getAvailableFontFamilyNames();
final DefaultComboBoxModel model = new
DefaultComboBoxModel(data);

final JComboBox combo = new JComboBox();
combo.setModel(model);
combo.setRenderer(new ColorRenderRandom());

frame.add(combo);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
,
,);
,
,


Gambar 69 ComboCo|or2[ava
ImagW
Mlsal klLa lngln membuaL aLau menampllka gambar dl !Combo8ox blsakah? 1enLu sa[a blsa Sama
caranya dengan sebelumnya hanya dengan sedlklL Lrlk
Str|p8andunk http]]str|pbandunkcom]
107

lmage8ender[ava
package pelajaran7;

import java.awt.Component;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class ImageRender implements ListCellRenderer ,

public Component getListCellRendererComponent(final JList list, final
Jbject value,
final int index, final boolean isSelected, final boolean
cellHasFocus) ,
final File file = (File) value;

final JLabel label = new JLabel(file.getName());
label.setJpaque(true);
label.setIcon(new ImageIcon(file.getPath()));

if (isSelected) ,
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
, else ,
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
,

return label;
,
,

Sekarang Llnggal buaL !Combo8oxnya
Combolmage[ava
package pelajaran7;

import java.awt.FlowLayout;
import java.io.File;
import java.io.FilenameFilter;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ComboImage ,

public static void main(final String, usu) ,
Str|p8andunk http]]str|pbandunkcom]
108

SwingUtilities.invokeLater(new Runnable() ,

public void run() ,

final File, files = new File("smiles").listFiles(new
FilenameFilter() ,

public boolean accept(File dir, String name) ,
if (name.toUpperCase().endsWith(".PNG")) ,
return true;
,
return false;
,
,);

for (final File f : files) ,
System.o:t.println(f.getName());
,

final DefaultComboBoxModel model = new
DefaultComboBoxModel(files);

final JComboBox combo = new JComboBox(model);
combo.setRenderer(new ImageRender());
combo.setMaximumRowCount(3);

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.add(combo);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
,
,);
,
,

Str|p8andunk http]]str|pbandunkcom]
109


Gambar 70 ComboImage[ava
KWsimpuan
Salah saLu yang paLuL dlLon[olkan dalam !Combo8ox adalah 8ender anda blsa berkreasl dengan
adanya faslllLas render LersebuL Mlsalnya anda lngln menampllkan gradlenL background seperLl lnl
Cradlen8ender[ava
package pelajaran7;

import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class GradienRender implements ListCellRenderer ,

public Component getListCellRendererComponent(final JList list, final
Jbject value,
final int index, final boolean isSelected, final boolean
cellHasFocus) ,

final File file = (File) value;

final JLabel label1 = new JLabel(file.getName()) ,

@Jverride
Str|p8andunk http]]str|pbandunkcom]
110

protected void paintComponent(Graphics g) ,
GradientPaint paint = new GradientPaint(0, 0, Color.G#EEN, 0,
getHeight(), Color.YELLOW);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());

super.paintComponent(g);
,
,;

final JLabel label2 = new JLabel(file.getName()) ,

@Jverride
protected void paintComponent(Graphics g) ,
GradientPaint paint = new GradientPaint(0, 0, Color.YELLOW, 0,
getHeight(), Color.G#EEN);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());

super.paintComponent(g);
,
,;

if (index % 2 == 0) ,
label1.setIcon(new ImageIcon(file.getPath()));
return label1;
, else ,
label2.setIcon(new ImageIcon(file.getPath()));
return label2;
,
,
,

Sekarang Llnggal menggunakannya dalam !Combo8ox
ComboCradlenL[ava
package pelajaran7;

import java.awt.FlowLayout;
import java.io.File;
import java.io.FilenameFilter;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ComboGradient ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,
Str|p8andunk http]]str|pbandunkcom]
111


public void run() ,

final File, files = new File("smiles").listFiles(new
FilenameFilter() ,

public boolean accept(File dir, String name) ,
if (name.toUpperCase().endsWith(".PNG")) ,
return true;
,
return false;
,
,);

for (final File f : files) ,
System.o:t.println(f.getName());
,

final DefaultComboBoxModel model = new
DefaultComboBoxModel(files);

final JComboBox combo = new JComboBox(model);
combo.setRenderer(new GradienRender());
combo.setMaximumRowCount(3);

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.add(combo);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
,
,);
,
,

Str|p8andunk http]]str|pbandunkcom]
112


Gambar 71 ComboGrad|ent[ava
Cradlen8ender2[ava
package pelajaran7;

import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.File;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class GradienRender2 implements ListCellRenderer ,

private final Random r = new Random();

public Component getListCellRendererComponent(final JList list,
final Jbject value, final int index, final boolean isSelected,
final boolean cellHasFocus) ,

final File file = (File) value;

final Color c = new Color(this.r.nextInt(255), this.r.nextInt(255),
this.r.nextInt(255));
final Color c2 = new Color(this.r.nextInt(255), this.r.nextInt(255),
this.r.nextInt(255));

final JLabel label1 = new JLabel(file.getName()) ,

Str|p8andunk http]]str|pbandunkcom]
113

@Jverride
protected void paintComponent(Graphics g) ,
GradientPaint paint = new GradientPaint(0, 0, c, 0,
getHeight(), c2);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());

super.paintComponent(g);
,
,;

final JLabel label2 = new JLabel(file.getName()) ,

@Jverride
protected void paintComponent(Graphics g) ,
GradientPaint paint = new GradientPaint(0, 0, c2, 0,
getHeight(), c);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());

super.paintComponent(g);
,
,;

if (index % 2 == 0) ,
label1.setIcon(new ImageIcon(file.getPath()));
return label1;
, else ,
label2.setIcon(new ImageIcon(file.getPath()));
return label2;
,
,
,

ComboCradlenL2[ava
package pelajaran7;

import java.awt.FlowLayout;
import java.io.File;
import java.io.FilenameFilter;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ComboGradient2 ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

Str|p8andunk http]]str|pbandunkcom]
114

public void run() ,

final File, files = new File("smiles")
.listFiles(new FilenameFilter() ,

public boolean accept(File dir, String name) ,
if (name.toUpperCase().endsWith(".PNG")) ,
return true;
,
return false;
,
,);

for (final File f : files) ,
System.o:t.println(f.getName());
,

final DefaultComboBoxModel model = new
DefaultComboBoxModel(files);

final JComboBox combo = new JComboBox(model);
combo.setRenderer(new GradienRender2());
combo.setMaximumRowCount(3);

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.add(combo);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
,
,);
,
,


Gambar 72 ComboGrad|ent2[ava
Str|p8andunk http]]str|pbandunkcom]
113

Wa|aran 8
List
RWndWr
?ach!!! Lagl lagl soal render Cak blsa dlpungklrl kalo klLa blcara LenLang exLreem dl !ComboCox
!LlsL !Lree dan !1able pasLl mellbaLkan 8ender unLuk menseL render ke !LlsL gunakan
lList /ist new lList{)
/istsetce//kenderer{ce//kenderer render)

BaUkground
Sekarang klLa akan membuaL !LlsL yang dlrender dengan warna background seperLl Ladl pada
!Combo8ox uan unLuk rendernya klLa cukup menggunakan render color mlllk !Combo8ox Ladl
LlsLColor[ava
package pelajaran8;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran7.ColorRender;

/
@author usu
/
public class ListColor ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final String, data = GraphicsEnvironment

.etLocalGraphicsEnvironment().getAvailableFontFamilyNames();

final DefaultListModel model = new DefaultListModel();
for (final String f : data) ,
model.addElement(f);
,

final JList list = new JList(model);
list.setPreferredSize(new Dimension(200, 200));
list.setCellRenderer(new ColorRender());

final Frame frame = new Frame();
frame.setLayout(new FlowLayout());
Str|p8andunk http]]str|pbandunkcom]
116

frame.add(new JScrollPane(list));
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
,
,);
,
,


Gambar 73 L|stCo|or[ava
LlsLColor2[ava
package pelajaran8;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran7.ColorRenderRandom;

/
@author usu
/
public class ListColor2 ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final String, data = GraphicsEnvironment

.etLocalGraphicsEnvironment().getAvailableFontFamilyNames();

final DefaultListModel model = new DefaultListModel();
for (final String f : data) ,
model.addElement(f);
,

final JList list = new JList(model);
list.setPreferredSize(new Dimension(200, 200));
list.setCellRenderer(new ColorRenderRandom());
Str|p8andunk http]]str|pbandunkcom]
117


final Frame frame = new Frame();
frame.setLayout(new FlowLayout());
frame.add(new JScrollPane(list));
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
,
,);
,
,


Gambar 74 L|stCo|or2[ava
ImagW
Sekarang klLa akan menggunakan render lmage mlllk !Combo8ox Ladl unLuk menampllkan gambar
dalam !LlsL
LlsL8ackground[ava
package pelajaran8;

import java.io.File;
import java.io.FilenameFilter;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;
import pelajaran7.ImageRender;

/
@author usu
/
public class ListBackground ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final File, files = new File("smiles").listFiles(new
FilenameFilter() ,

public boolean accept(File dir, String name) ,
Str|p8andunk http]]str|pbandunkcom]
118

if (name.toUpperCase().endsWith(".PNG")) ,
return true;
,
return false;
,
,);

final DefaultListModel model = new DefaultListModel();
for (final File f : files) ,
model.addElement(f);
,

final JList list = new JList(model);
list.setCellRenderer(new ImageRender());

final Frame frame = new Frame();
frame.add(new JScrollPane(list));
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
,
,);
,
,


Gambar 7S L|st8ackground[ava
BooWan
ada pembahasan sebelumnya saya buaL render menggunakan !Label namun sebernya Lak hanya
!Label klLa [uga blsa menampllkan render class yang merupakan Lurunan darl ComponenL Mlsal kall
lnl klLa akan menampllkan render boolean menggunakan !Chek8ox
8oolean8ender[ava
package pelajaran8;

import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
Str|p8andunk http]]str|pbandunkcom]
119


/
@author usu
/
public class BooleanRender implements ListCellRenderer ,

public Component getListCellRendererComponent(final JList list, final
Jbject value,
final int index, final boolean isSelected, final boolean
cellHasFocus) ,
final boolean nilai =
Boolean.val:eOf(value.toString()).booleanValue();
final JCheckBox chek = new JCheckBox(value.toString());
chek.setJpaque(true);
chek.setSelected(nilai);

if (isSelected) ,
chek.setBackground(list.getSelectionBackground());
chek.setForeground(list.getSelectionForeground());
, else ,
chek.setBackground(list.getBackground());
chek.setForeground(list.getForeground());
,

return chek;
,
,

Sekarang Llnggal klLa gunakan render boolean LersebuL ke !LlsL
LlsL8oolean[ava
package pelajaran8;

import java.awt.BorderLayout;
import java.util.Random;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ListBoolean ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,

final Random generator = new Random();

final DefaultListModel model = new DefaultListModel();
for (int i = 0; i < 100; i++) ,
model.addElement(generator.nextBoolean());
,
Str|p8andunk http]]str|pbandunkcom]
120


final JList list = new JList(model);
list.setCellRenderer(new BooleanRender());

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(list));
frame.setSize(200, 200);
frame.setVisible(true);
,
,);
,
,


Gambar 76 L|st8oo|ean[ava
NumbWr
kemball lagl ke render menggunakan !Label Lapl kall lnl saya mau memberl sedlklL senLuhan kreasl
nomber lngln Lahu apa Lerus baca
number8ender[ava
package pelajaran8;

import java.awt.Component;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class NumberRender implements ListCellRenderer ,

public Component getListCellRendererComponent(final JList list, final
Jbject value,
final int index, final boolean isSelected, final boolean
cellHasFocus) ,
final JLabel label = new JLabel(value.toString());
label.setJpaque(true);

Str|p8andunk http]]str|pbandunkcom]
121

final int size = Integer.val:eOf(value.toString()).intValue();

final Font f = new Font(label.getFont().getFamily(),
label.getFont().getStyle(), size);
label.setFont(f);

if (isSelected) ,
label.setBackground(list.getSelectionBackground());
label.setForeground(list.getSelectionForeground());
, else ,
label.setBackground(list.getBackground());
label.setForeground(list.getForeground());
,

return label;
,

,

Ck selesal sekarang Llnggal menggunakannya ke !LlsL
LlsLnumber[ava
package pelajaran8;

import java.awt.BorderLayout;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ListNumber ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,

final DefaultListModel model = new DefaultListModel();
for (int i = 0; i < 100; i++) ,
model.addElement(i);
,

final JList list = new JList(model);
list.setCellRenderer(new NumberRender());

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(list));
frame.setSize(200, 200);
frame.setVisible(true);
,
,);
Str|p8andunk http]]str|pbandunkcom]
122

,
,


Gambar 77 L|stNumber[ava
Pahaha Lrlk lnl sebenarnya [arang dlgunakan Lapl lumayan buaL sLyle a[a
Font
Sekaranag mlsalnya klLa lngln membuaL fonL chooser dan klLa lngln menampllkan fonLnya dl !LlsL lLu
slch gampang blsa dlaLur
lonL8ender[ava
package pelajaran8;

import java.awt.Component;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/
@author usu
/
public class FontRender implements ListCellRenderer ,

public Component getListCellRendererComponent(final JList list, final
Jbject value,
final int index, final boolean isSelected, final boolean
cellHasFocus) ,
final String font = value.toString();

final JLabel label = new JLabel(font);
label.setJpaque(true);

final Font f = new Font(font, label.getFont().getStyle(),
label.getFont().getSize());
label.setFont(f);

if (isSelected) ,
label.setBackground(list.getSelectionBackground());
label.setForeground(list.getSelectionForeground());
, else ,
Str|p8andunk http]]str|pbandunkcom]
123

label.setBackground(list.getBackground());
label.setForeground(list.getForeground());
,

return label;
,
,

Slm salablm sekarang semua fonL akan berubah sesual dengan fonL Leks
LlsLlonL[ava
package pelajaran8;

import java.awt.BorderLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ListFont ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,

final String, data =
GraphicsEnvironment.etLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();

final DefaultListModel model = new DefaultListModel();
for (final String f : data) ,
model.addElement(f);
,

final JList list = new JList(model);
list.setCellRenderer(new FontRender());

final Frame frame = new Frame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(list));
frame.setSize(200, 200);
frame.setVisible(true);
,
,);
,
,

Str|p8andunk http]]str|pbandunkcom]
124


Gambar 78 L|stIont[ava
ModW
Selaln memanlpulasl !LlsL lewaL render klLa [uga dapaL memanlpulasl swlng khususnya leblh
dlLekankan unLuk memanlpulasl daLa yang dlmlllkl !LlsL
Sorting
8lasanya unLuk menampung daLa !LlsL klLa menggunakan uefaulLLlsLModel namun sampal Lullsan
lnl dlbuaL uefaulLLlsLModel belum memlllkl kemampuan unLuk menguruLkan daLa !adl sekarang klLa
akan mencoba unLuk membuaL LlsLModel yang dapaL menguruLkan daLa
Sebelumnya klLa buaL enum sorLlng
SorLlng[ava
package pelajaran8;

/
@author usu
/
public enum Sorting ,

ASCENDING("ASCENDING"),

DEFAULT("DEFAULT"),

DESCENDING("DESCENDING");

private String sortingMethode;

private Sorting(final String sortingMethode) ,
this.sortingMethode = sortingMethode;
,

public String getSortingMethod() ,
return this.sortingMethode;
,

@Jverride
public String toString() ,
return getSortingMethod();
,
Str|p8andunk http]]str|pbandunkcom]
123

,

Sekarang klLa buaL modelnya
LlsLModelusu[ava
package pelajaran8;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.AbstractListModel;

/
@author usu
/
public class ListModelUsu extends AbstractListModel ,

private final ArrayList defaultData;
private final ArrayList filterData;
private Sorting sort;

public ListModelUsu() ,
super();
this.defaultData = new ArrayList();
this.filterData = new ArrayList();
setSort(Sorting.DEFAULT);
,

public void add(final Jbject e) ,
this.defaultData.add(e);
filter();
,

@SuppressWarnings("unchecked")
private void filter() ,
Comparator comp = null;
if (getSort() == Sorting.ASCENDING) ,
comp = new Comparator() ,

public int compare(final Jbject o1, final Jbject o2) ,
if (o1 instanceof Comparator) ,
return ((Comparable) o1).compareTo(o2);
, else ,
return o1.toString().compareTo(o2.toString());
,
,
,;
, else if (getSort() == Sorting.DESCENDING) ,
comp = new Comparator() ,

public int compare(final Jbject o1, final Jbject o2) ,
if (o1 instanceof Comparator) ,
return ((Comparable) 21).compareTo(o1);
, else ,
return o2.toString().compareTo(o1.toString());
,
,
,;
Str|p8andunk http]]str|pbandunkcom]
126

, else ,
comp = null;
,

this.filterData.clear();
this.filterData.addAll(this.defaultData);

if (comp != null) ,
Collections.sort(this.filterData, comp);
,
fireContentsChanged(this, 0, this.filterData.size() - 1);
,

public Jbject getElementAt(final int index) ,
return this.filterData.get(index);
,

public int getSize() ,
return this.filterData.size();
,

public Sorting getSort() ,
return this.sort;
,

public void remove(final Jbject o) ,
this.defaultData.remove(o);
filter();
,

public void setSort(final Sorting sort) ,
if (getSort() != sort) ,
this.sort = sort;
filter();
,
,
,

uan sekarang anda blsa menggunakan model LersebuL unLuk !LlsL
ListMode/usu mode/ new ListMode/usu{)
/istsetMode/{mode/)

uan unLuk menguruLkan ascendlng
mode/set5ort{5ortinq45cNulN6)

unLuk menguruLkan descendlng
mode/set5ort{5ortinqu5cNulN6)

uan unLuk ke uruLan awal semula
Str|p8andunk http]]str|pbandunkcom]
127

mode/set5ort{5ortinqul4uL1)

ConLoh apllkaslnya

Gambar 79 L|st menggunakan L|stMode|Usu saat keadaan No SCk1

Gambar 80 L|st menggunakan L|stMode|Usu saat keadaan ASCLNDING
Str|p8andunk http]]str|pbandunkcom]
128


Gambar 81 L|st menggunakan L|stMode|Usu saat keadaan DLSCLNDING
unLuk source kode apllkasl dlaLas anda blsa mellhaLnya dl pro[ecL SwlngMakeCver
FitWr
Sekarang maslh dalam Loplk model klLa akan membuaL model yang blsa dlfllLer Mlsal klLa lngln
mencarl daLa SLrlng yang mengandung kaLa ba" dalam model !LlsL sehlngga !LlsL hanya
menampllkan daLa yang mengandung kaLa ba" Lanpa menghapus daLa lalnnya nah lLu lah fllLer
unLuk membuaL fllLer leblh balk klLa gunakan model yang Ladl dlbuaL agar selaln blsa dlfllLer model
[uga blsa dluruLkan
LlsLModelusulllLer[ava
package pelajaran8;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.AbstractListModel;

/
@author usu
/
public class ListModelUsuFilter extends AbstractListModel ,

private final ArrayList defaultData;
private String filter;
private final ArrayList filterData;
private Sorting sort;

public ListModelUsuFilter() ,
super();
this.defaultData = new ArrayList();
this.filterData = new ArrayList();
setSort(Sorting.DEFAULT);
,

public void add(final Jbject e) ,
this.defaultData.add(e);
Str|p8andunk http]]str|pbandunkcom]
129

filter();
,

@SuppressWarnings("unchecked")
private void filter() ,
Comparator comp = null;
if (getSort() == Sorting.ASCENDING) ,
comp = new Comparator() ,

public int compare(final Jbject o1, final Jbject o2) ,
if (o1 instanceof Comparator) ,
return ((Comparable) o1).compareTo(o2);
, else ,
return o1.toString().compareTo(o2.toString());
,
,
,;
, else if (getSort() == Sorting.DESCENDING) ,
comp = new Comparator() ,

public int compare(final Jbject o1, final Jbject o2) ,
if (o1 instanceof Comparator) ,
return ((Comparable) 21).compareTo(o1);
, else ,
return o2.toString().compareTo(o1.toString());
,
,
,;
, else ,
comp = null;
,

this.filterData.clear();
if (getFilter() == null) ,
this.filterData.addAll(this.defaultData);
, else ,
for (final Jbject o : this.defaultData) ,
if (o.toString().contains(getFilter())) ,
this.filterData.add(o);
,
,
,

if (comp != null) ,
Collections.sort(this.filterData, comp);
,
fireContentsChanged(this, 0, this.filterData.size() - 1);
,

public Jbject getElementAt(final int index) ,
return this.filterData.get(index);
,

public String getFilter() ,
return this.filter;
,

public int getSize() ,
return this.filterData.size();
,

Str|p8andunk http]]str|pbandunkcom]
130

public Sorting getSort() ,
return this.sort;
,

public void remove(final Jbject o) ,
this.defaultData.remove(o);
filter();
,

public void setFilter(final String filter) ,
this.filter = filter;
filter();
,

public void setSort(final Sorting sort) ,
if (getSort() != sort) ,
this.sort = sort;
filter();
,
,
,


Gambar 82 L|st menggunakan L|stMode|UsuI||ter saat t|dak d| f||ter
Str|p8andunk http]]str|pbandunkcom]
131


Gambar 83 L|st menggunakan L|stMode|UsuI||ter saat d|f||ter
kode unLuk apllkasl dlaLas blsa anda dapaLkan dl pro[ecL SwlngMakeCver uan lnLl unLuk memfllLer
dlaLas adalah dengan menggunakan kode
fi/teruotoc/eor{)
if {qetli/ter{) nu//)
fi/teruotoodd4//{defou/tuoto)
e/se
for {Object o defou/tuoto)
if {oto5trinq{)contoins{qetli/ter{)))
fi/teruotoodd{o)




KWsimpuan
uarl pembahasan dlaLas sepuLar !LlsL anda blsa membuaL berbagal macam kreasl dengan render
!Combo8ox seperLl pada render !LlsL karena memang !LlsL dan !Combo8ox memlllkl render yang
sama yalLu lnLerface LlsLCell8endered
Sekarang sllahkan anda coba membuaL fonL browser seperLl dobawah lnl
Str|p8andunk http]]str|pbandunkcom]
132


Gambar 84 Iont 8rowser
kall lnl saya senga[a Lak memasukkan source kodenya karena hal lnl pasLl blsa anda buaL darl
gabungan gabungan pembahasan sebelumnya
Str|p8andunk http]]str|pbandunkcom]
133

Wa|aran 9
iWwort
Apa Luh !vleworL? Mungkln anda pernah mendengar aLau [uga anda belum pernah mendengarnya
?ach LenLu sa[a kalo anda [arang mendengar LenLang lnl karena memang !vleworL lLu [arang sekall
dlgunakan LanLas kenapa klLa membahasnya?
Alasan yang pallng uLama adalah !Scrollane memerklukan !vleworL unLuk menampllkan
componenL yang berada dldalamnya

Gambar 8S I|ewort da|am Scro||ane
Mlsal klLa lngln membuaL !1exLArea yang Lranparan maka mau gak mau selaln membuaL komponenL
!1exLAreanya Lranparan klLa [uga harus membuaL !vleworLnya Lranparan
vleworL1ranparan[ava
package pelajaran9;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.EmptyBorder;
Str|p8andunk http]]str|pbandunkcom]
134

import pelajaran1.Frame;

/
@author usu
/
public class ViewPortTranparan ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JTextArea area = new JTextArea();
area.setJpaque(false);

final JViewport port = new JViewport();
port.setJpaque(false);
port.setView(area);

final JScrollPane pane = new JScrollPane();
pane.setJpaque(false);
pane.setViewport(port);

final JPanel panel = new JPanel(new BorderLayout()) ,

@Jverride
protected void paintComponent(Graphics g) ,
super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(0, 0, Color.G#EEN, 0,
getHeight(), Color.YELLOW));
g2.fillRect(0, 0, getWidth(), getHeight());
,
,;
panel.setBorder(new EmptyBorder(20, 20, 20, 20));
panel.add(pane);

final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(panel);
frame.setSize(400, 400);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,
,

Str|p8andunk http]]str|pbandunkcom]
133


Gambar 86 I|ewort1ranparan[ava
TWtArWa
kall lnl klLa akan masuk ke pembahasan LenLang kolaborasl !vleworL dan !1exLArea
BaUkground ImagW
Salah saLu manfaaL !vleworL unLuk !1exLArea adalah menampllkan background gambar
vleworLlmage[ava
package pelajaran9;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ViewPortImage extends JViewport ,

public static void main(final String, usu) ,
Str|p8andunk http]]str|pbandunkcom]
136

SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JTextArea area = new JTextArea();
area.setJpaque(false);

final ViewPortImage port = new ViewPortImage();
port.setView(area);
port
.setImage(new
ImageIcon(getClass().getResource("/pelajaran9/image.jpg"))
.getImage());

final JScrollPane pane = new JScrollPane();
pane.setViewport(port);

final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(pane);
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private Image image;

public ViewPortImage() ,
super();
,

public Image getImage() ,
return this.image;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);
if (getImage() != null) ,
final Graphics2D g2 = (Graphics2D) g.create();
for (int i = 0; i < getWidth(); i += getImage().getWidth(null)) ,
for (int j = 0; j < getHeight(); j +=
getImage().getHeight(null)) ,
g2.drawImage(getImage(), i, j, null);
,
,
,
,

public void setImage(final Image image) ,
this.image = image;
repaint();
,
,

Str|p8andunk http]]str|pbandunkcom]
137


Gambar 87 I|ewortImage[ava

Gambar 88 I|ewortImage[ava
8erbeda [lka klLa membuaL background gambarnya dl !1exLArea pada !vleworL gambar
background akan dlam walaupun scrollbar dlscroll keaLas kebawah kekanan aLau keklrl !lka klLa
membuaL gambar dalam !1exLArea maka gambar belakang akan lkuL scroll (berubah) selrlng dengan
lokasl scrollbar dlrubah
1exLArealmage[ava
package pelajaran9;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
Str|p8andunk http]]str|pbandunkcom]
138

import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class TextAreaImage extends JTextArea ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final TextAreaImage area = new TextAreaImage();
area
.setImage(new
ImageIcon(getClass().getResource("/pelajaran9/image.jpg"))
.getImage());

final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(area));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private Image image;

public TextAreaImage() ,
super();
,

public Image getImage() ,
return this.image;
,

@Jverride
protected void paintComponent(final Graphics g) ,
if (isJpaque()) ,
setJpaque(false);
,
if (getImage() != null) ,
final Graphics2D g2 = (Graphics2D) g.create();
for (int i = 0; i < getWidth(); i += getImage().getWidth(null)) ,
for (int j = 0; j < getHeight(); j +=
getImage().getHeight(null)) ,
g2.drawImage(getImage(), i, j, null);
,
,
,
super.paintComponent(g);
,

public void setImage(final Image image) ,
this.image = image;
repaint();
Str|p8andunk http]]str|pbandunkcom]
139

,
,


Gambar 89 1extAreaImage[ava

Gambar 90 1extAreaImage[ava
!adl menuruL saya leblh balk membuaL background dl !vleworL darl pada dl !1exLArea
Cass
MembuaL efek glass berarLl klLa harus membuaL efeknya dlaLas !1exLArea sedangkan meLode
palnLComponenL() unLuk !vleworL akan dlgambar dlbelakang !1exLArea sehlngga unLuk membuaL
afek glass aLau efekefek yang berada dl depan !1exLArea klLa harus mengoverlde meLode
palnLChlldren()
Str|p8andunk http]]str|pbandunkcom]
140

vleworLlmageClass[ava
package pelajaran9;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class ViewPortImageGlass extends JViewport ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JTextArea area = new JTextArea();
area.setJpaque(false);

final ViewPortImageGlass port = new ViewPortImageGlass();
port.setView(area);
port
.setImage(new
ImageIcon(getClass().getResource("/pelajaran9/image.jpg"))
.getImage());

final JScrollPane pane = new JScrollPane();
pane.setViewport(port);

final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(pane);
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private Image image;

public ViewPortImageGlass() ,
super();
,

public Image getImage() ,
return this.image;
,

@Jverride
Str|p8andunk http]]str|pbandunkcom]
141

protected void paintChildren(final Graphics g) ,
super.paintChildren(g);
final Graphics2D g2 = (Graphics2D) g.create();

final Color dark = new Color(1F, 0F, 0F, 0F);
final Color light = new Color(1F, 0F, 0F, 0.5F);
final GradientPaint paint = new GradientPaint(0, 0, light, 0,
getHeight() / 2, dark);

g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,

@Jverride
protected void paintComponent(final Graphics g) ,
final Graphics2D g2 = (Graphics2D) g.create();
super.paintComponent(g);
if (getImage() != null) ,
for (int i = 0; i < getWidth(); i += getImage().getWidth(null)) ,
for (int j = 0; j < getHeight(); j +=
getImage().getHeight(null)) ,
g2.drawImage(getImage(), i, j, null);
,
,
,
,

public void setImage(final Image image) ,
this.image = image;
repaint();
,
,


Gambar 91 I|ewortImageG|ass[ava
!adl lngaL kalo lngln membuaL gambar yang dlleLakkan dl aLas componenL yang dlLampllkan
!vleworL semlsal !1exLArea gunakan meLode palnLChlldren() Ck!!!
Str|p8andunk http]]str|pbandunkcom]
142

Wa|aran
Window
SeperLl halnya !vleworL !Wlndow pun memang [arang sekall dlgunakan unLuk membuaL apllkasl
1apl ada kalanya !Wlndow berguna mlsal unLuk menampllkan splashscreen aLau abouL screen
About SUrWWn
Layaknya !lrame !Wlndow pun merupakan lorm namun Lak memlllkl sLyle SysLem Cperasl dengan
kaLa laln !Wlndow LerllhaL seperLl panel yang berdlrl sendlrl

Gambar 92 Contoh W|ndow
Anda dapaL mellhaL perbedaan wlndow dengan !lrame darl gambar dlaLas
Sekarang klLa akan membuaL AbouLScreen menggunakan !Wlndow
WlndowAbouL[ava
package pelajaran10;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JButton;
Str|p8andunk http]]str|pbandunkcom]
143

import javax.swing.JLabel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class WindowAbout extends JWindow ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final WindowAbout window = new WindowAbout();
window.setAlwaysJnTop(true);
window.setImage(new
ImageIcon(getClass().getResource("/pelajaran10/about.jpg"))
.getImage());

final Frame frame = new Frame();
frame.setLayout(new FlowLayout());
frame.add(new JButton(new AbstractAction("SHJW ABJUT") ,

public void actionPerformed(final ActionEvent e) ,
window.setLocationRelativeTo(null);
window.setVisible(true);
,
,));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,
,);
,

private Image image;

private final JLabel label;

public WindowAbout() ,
super();
this.label = new JLabel();
setLayout(new BorderLayout());
add(this.label);
addMouseListener(new MouseAdapter() ,

@Jverride
public void mousePressed(final MouseEvent e) ,
setVisible(false);
,
,);
,

public Image getImage() ,
return this.image;
,

public void setImage(final Image image) ,
this.image = image;
Str|p8andunk http]]str|pbandunkcom]
144

this.label.setIcon(new ImageIcon(image));
pack();
,
,


Gambar 93 W|ndowAbout[ava
!lka klLa menekan Lombol SPCW A8Cu1 maka akan keluar !Wlndow AbouL

Gambar 94 W|ndowAbout[ava saat menamp||kan AboutScreen
Spasb SUrWWn
Ck sekarang klLa coba membuaL splash screen menggunakan !Wlndow
WlndowSplashScreen[ava
package pelajaran10;

import java.awt.BorderLayout;
import java.awt.Image;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JWindow;
import javax.swing.WindowConstants;
Str|p8andunk http]]str|pbandunkcom]
143

import pelajaran1.Frame;

/
@author usu
/
public class WindowSplashScreen extends JWindow ,

public static void main(final String, usu) ,
new Thread(new Runnable() ,

public void run() ,
try ,
final WindowSplashScreen window = new WindowSplashScreen();
window.setAlwaysJnTop(true);
window.setImage(new
ImageIcon(getClass().getResource("/pelajaran10/about.jpg"))
.getImage());
window.setLocationRelativeTo(null);

window.setVisible(true);

Thread.sleep(3000);

final Frame frame = new Frame();
frame.setSize(400, 400);

frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

window.setVisible(false);
frame.setVisible(true);
, catch (final InterruptedException ex) ,

Logger.etLoer(WindowSplashScreen.class.getName()).log(Level.SEVE#E,
null, ex);
,
,
,).start();
,

private Image image;

private final JLabel label;

public WindowSplashScreen() ,
super();
this.label = new JLabel();
setLayout(new BorderLayout());
add(this.label);
,

public Image getImage() ,
return this.image;
,

public void setImage(final Image image) ,
this.image = image;
this.label.setIcon(new ImageIcon(image));
pack();
,
,
Str|p8andunk http]]str|pbandunkcom]
146


Splash screen Lampll selama 3 deLlk

Gambar 9S W|ndowSp|ashScreen[ava saat sp|ashscreen
SeLelah lLu splash screen menghllang dan lrame apllkasl keluar

Gambar 96 W|ndowSp|ashScreen[ava saat form muncu|
Str|p8andunk http]]str|pbandunkcom]
147

KWsimpuan
Walaupun !Wlndow [arang dlgunakan namun kadang !Wlndow bermanfaaL [uga conLohnya
membuaL AbouL Screen aLau Splash Screen
1apl selaln unLuk kedua hal dlaLas klLa [uga blsa memanfaaLkan !Wlndow sebagal LoolLlp mlsal klLa
lngln membuaL sebuah LoolLlp unLuk componenL lalu klLa berl aksl onMouseLnLer !Wlndow muncul
dan onMouseLxlL !Wlndow menghllang
Wlndow1oolLlp[ava
package pelajaran10;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/
@author usu
/
public class WindowTooltip extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new WindowTooltip().setVisible(true);
,
,);
,

private final JWindow window;

public WindowTooltip() ,
super();

this.window = new JWindow(this);
this.window.setAlwaysJnTop(true);
this.window.setLayout(new BorderLayout());
this.window.add(new JScrollPane(new JTextArea("INI ADALAH TJJLTIP
WINDJW")));
this.window.setSize(200, 200);

final JTextField field = new JTextField();
field.setColumns(30);
field.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseEntered(final MouseEvent e) ,
final Point p = field.getLocationJnScreen();
Str|p8andunk http]]str|pbandunkcom]
148

p.y += field.getHeight();
WindowTooltip.this.window.setLocation(p);
WindowTooltip.this.window.setVisible(true);
,

@Jverride
public void mouseExited(final MouseEvent e) ,
WindowTooltip.this.window.setVisible(false);
,
,);

setLayout(new FlowLayout());
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
add(field);
pack();
,
,

keLlka mouse berada dl luar !1exLlleld maka !Wlndow Lak muncul aLau menghllang Sedangkan
keLlka mouse masuk ke wllayah !1exLlleld maka secara oLomaLls !Wlndow akan muncul

Gambar 97 W|ndow1oo|t|p[ava

Gambar 98 W|ndow1oo|t|p[ava saat w|ndow too|t|p muncu|
!adl [angan anggap enLeng !Wlndow karena kadang perlu kreaLlvlLas unLuk membuaL !Wlndow [adl
bermanfaaL

Str|p8andunk http]]str|pbandunkcom]
149

Wa|aran
TrWW
RWndWr
?up masuk lagl soal render 1apl kall lnl klLa akan merender !1ree Walaupun kenyaLaannya saya
[arang sekall menggunakan !1ree hahaha [adl saya [arang mengexpose !1ree unLuk menseL render
ke !1ree gunakan
l1ree tree new l1ree{)
treesetce//kenderer{1reece//kenderer render)

FiW and FodWr
Sekarang klLa akan membuaL sebuah cell render unLuk menampllkan !1ree yang menampung daLa
flle and dlrecLory
llle8ender[ava
package pelajaran11;

import java.awt.Component;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;

/
@author usu
/
public class FileRender extends DefaultTreeCellRenderer ,

public FileRender() ,
super();
,

@Jverride
public Component getTreeCellRendererComponent(final JTree tree, final
Jbject value,
final boolean sel, final boolean expanded, final boolean leaf,
final int row,
final boolean hasFocus) ,

final File file = new File(value.toString());
setJpenIcon(new
ImageIcon(getClass().getResource("/pelajaran11/folder.png")));
setClosedIcon(getJpenIcon());
setLeafIcon(new
ImageIcon(getClass().getResource("/pelajaran11/file.png")));

final Component c = super.getTreeCellRendererComponent(tree, value,
sel, expanded, leaf, row,
hasFocus);
setText(file.getName());
Str|p8andunk http]]str|pbandunkcom]
130

return c;
,
,

SeLelah membuaL Cell 8endernya sekarang Llnggal dlgunakan ke !1reenya
1reellle[ava
package pelajaran11;

import java.awt.BorderLayout;
import java.io.File;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import pelajaran1.Frame;

/
@author usu
/
public class TreeFile extends JTree ,

public static final void insertNode(final DefaultMutableTreeNode node,
final File folder) ,
for (final File f : folder.listFiles()) ,
final DefaultMutableTreeNode child = new
DefaultMutableTreeNode(f);
if (f.isDirectory()) ,
TreeFile.insertNode(child, f);
,
node.add(child);
,
,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeFile()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeFile() ,
super();

final DefaultMutableTreeNode root = new DefaultMutableTreeNode(new
File(".."));

TreeFile.insertNode(root, new File(".."));

final DefaultTreeModel model = new DefaultTreeModel(root);
setModel(model);
setCellRenderer(new FileRender());
,
,

Str|p8andunk http]]str|pbandunkcom]
131


Gambar 99 I||ekender[ava
About IUon
Ch lya sebelum saya lan[uL ke Lrlx render selan[uLnya saya mau bllang kalo dl !1ree LerdapaL 3 lcon
perLama openlcon yalLu lcon yang dlgunakan oleh dlrekLorl (node yang memlllkl anak) keLlka Lerbuka
(expand) yang kedua closelcon yalLu lcon yang dlgunakan oleh dlrekLory keLlka LerLuLup (collapse)
dan yang Lerakhlr adalah leaflcon yalLu lcon yang dlgunakan onelh node yang Lak memlllkl anak
LWaf IUon
Sebenarnya lcon yang dlgunakan oleh leaf Lak harus sama klLa blsa merubahnya sesual dengan yang
klLa lnglnkan conLohnya sekarang klLa akan membuaL 2 buaL leaf lcon klLa ambll conLoh unLuk kode
dlaLas namun menggunakan Cell 8ender yang berbeda
llle8enderLeaf[ava
package pelajaran11;

import java.awt.Component;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;

/
@author usu
/
public class FileRenderLeaf extends DefaultTreeCellRenderer ,

public FileRenderLeaf() ,
super();
,

@Jverride
public Component getTreeCellRendererComponent(final JTree tree, final
Str|p8andunk http]]str|pbandunkcom]
132

Jbject value,
final boolean sel, final boolean expanded, final boolean leaf,
final int row,
final boolean hasFocus) ,

final File file = new File(value.toString());
setText(file.getName());
setJpenIcon(new
ImageIcon(getClass().getResource("/pelajaran11/folder.png")));
setClosedIcon(getJpenIcon());

if (file.toString().toUpperCase().endsWith(".JAVA")) ,
setLeafIcon(new
ImageIcon(getClass().getResource("/pelajaran11/unknow.png")));
, else ,
setLeafIcon(new
ImageIcon(getClass().getResource("/pelajaran11/file.png")));
,

return super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus);
,
,

Sekarang klLa gunakan kode !1ree sebelumnya namun mengganLl cell rendernya
1reellleLeaf[ava
package pelajaran11;

import java.awt.BorderLayout;
import java.io.File;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import pelajaran1.Frame;

/
@author usu
/
public class TreeFileLeaf extends JTree ,

public static final void insertNode(final DefaultMutableTreeNode node,
final File folder) ,
for (final File f : folder.listFiles()) ,
final DefaultMutableTreeNode child = new
DefaultMutableTreeNode(f);
if (f.isDirectory()) ,
TreeFileLeaf.insertNode(child, f);
,
node.add(child);
,
,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
Str|p8andunk http]]str|pbandunkcom]
133

frame.add(new JScrollPane(new TreeFileLeaf()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeFileLeaf() ,
super();

final DefaultMutableTreeNode root = new DefaultMutableTreeNode(new
File(".."));

TreeFileLeaf.insertNode(root, new File(".."));

final DefaultTreeModel model = new DefaultTreeModel(root);
setModel(model);
setCellRenderer(new FileRenderLeaf());
,
,


Gambar 100 I||ekenderLeaf[ava
Saya melakukan perbedaan lcon berdasarkan [enls flle !adl anda blsa melakukan perbedaan leaf
lcon men[adl berapa macam sesual yang anda lnglnkan selama anda sanggup berlamalama codlng
hahaha
Coor
Sekarang klLa coba membuaL render yang merepresenLaslkan nllal Color Sehlngga klLa hapus sa[a
penggunaan lcon dalam rendernya
Color8ender[ava
package pelajaran11;

import java.awt.Color;
import java.awt.Component;
Str|p8andunk http]]str|pbandunkcom]
134

import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;

/
@author usu
/
public class ColorRender extends DefaultTreeCellRenderer ,

@Jverride
public Component getTreeCellRendererComponent(final JTree tree, final
Jbject value,
final boolean selected, final boolean expanded, final boolean
leaf, final int row,
final boolean hasFocus) ,
if (leaf) ,
final Color warna = (Color) ((DefaultMutableTreeNode)
value).getUserJbject();

final JLabel label = new JLabel();
label.setJpaque(true);
label.setBackground(warna);
label.setText("Red:" + warna.getRed() + ", Green:" +
warna.getGreen() + ", Blue:"
+ warna.getBlue() + ", Alpha:" + warna.getAlpha());

return label;
, else ,
return super
.getTreeCellRendererComponent(tree, value, leaf, expanded,
leaf, row, hasFocus);
,
,
,

Sekarang klLa buaL !1reenya
1reeColor[ava
package pelajaran11;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import pelajaran1.Frame;

/
@author usu
/
public class TreeColor extends JTree ,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
Str|p8andunk http]]str|pbandunkcom]
133

frame.add(new JScrollPane(new TreeColor()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeColor() ,
super();

final DefaultMutableTreeNode root = new
DefaultMutableTreeNode("RJJT");
root.add(new DefaultMutableTreeNode(Color.#ED));
root.add(new DefaultMutableTreeNode(Color.LACK));
root.add(new DefaultMutableTreeNode(Color.LUE));
root.add(new DefaultMutableTreeNode(Color.CYAN));
root.add(new DefaultMutableTreeNode(Color.DA#K_G#AY));
root.add(new DefaultMutableTreeNode(Color.G#AY));
root.add(new DefaultMutableTreeNode(Color.G#EEN));
root.add(new DefaultMutableTreeNode(Color.LIGHT_G#AY));
root.add(new DefaultMutableTreeNode(Color.AGENTA));
root.add(new DefaultMutableTreeNode(Color.O#ANGE));
root.add(new DefaultMutableTreeNode(Color.PINK));
root.add(new DefaultMutableTreeNode(Color.WHITE));
root.add(new DefaultMutableTreeNode(Color.YELLOW));

setModel(new DefaultTreeModel(root));

setCellRenderer(new ColorRender());
,
,


Gambar 101 1reeCo|or[ava
BaUkground
Selaln merubah render klLa [uga [angan lupa dengan meLode palnLComponenL aLau !vleworL
karena sekarang klLa akan bahas lagl soal hal lLu kalo anda lupa wah mendlng ballk lagl sana ke bab
!vleworL !!!
Str|p8andunk http]]str|pbandunkcom]
136

1ree8ackground[ava
package pelajaran11;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/

@author usu
/
public class TreeBackground extends JFrame ,

public TreeBackground() ,
super();

JViewport port = new JViewport() ,

@Jverride
protected void paintComponent(Graphics g) ,
super.paintComponent(g);

GradientPaint paint = new GradientPaint(0, 0, Color.G#EEN,
0, getHeight(), Color.YELLOW);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,
,;

JTree tree = new JTree();
tree.setJpaque(false);
port.setView(tree);

JScrollPane pane = new JScrollPane();
pane.setViewport(port);

setLayout(new BorderLayout());
add(pane);
setSize(400, 300);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
,

public static void main(String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new TreeBackground().setVisible(true);
,
,);
,
Str|p8andunk http]]str|pbandunkcom]
137

,


Gambar 102 1ree8ackground[ava
Wah seperLlnya ada sedlklL gangguan bagal mana kalo klLa buaL Cell8endernya Lransparan
l1ree tree new l1ree{)
treesetOpoque{fo/se)
treesetce//kenderer{new uefou/t1reece//kenderer{)

QOverride
pub/ic component qet1reece//kenderercomponent{l1ree tree Object vo/ue boo/eon se/
boo/eon exponded boo/eon /eof int row boo/eon hoslocus)
superqet1reece//kenderercomponent{tree vo/ue se/ exponded /eof row hoslocus)
lLobe/ /obe/ new lLobe/{vo/ueto5trinq{))
/obe/setOpoque{fo/se)
if {/eof)
/obe/setlcon{qetLeoflcon{))
e/se if {exponded)
/obe/setlcon{qetOpenlcon{))
e/se
/obe/setlcon{qetc/osedlcon{))

return /obe/

)

ALau lengkapnya seperLl lnl
1ree8ackground[ava
package pelajaran11;

Str|p8andunk http]]str|pbandunkcom]
138

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultTreeCellRenderer;

/
@author usu
/
public class TreeBackground extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new TreeBackground().setVisible(true);
,
,);
,

public TreeBackground() ,
super();

final JViewport port = new JViewport() ,

@Jverride
protected void paintComponent(Graphics g) ,
super.paintComponent(g);

GradientPaint paint = new GradientPaint(0, 0, Color.G#EEN, 0,
getHeight(), Color.YELLOW);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,
,;

final JTree tree = new JTree();
tree.setJpaque(false);
tree.setCellRenderer(new DefaultTreeCellRenderer() ,

@Jverride
public Component getTreeCellRendererComponent(final JTree tree,
final Jbject value,
final boolean sel, final boolean expanded, final boolean
leaf, final int row,
final boolean hasFocus) ,
super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus);
final JLabel label = new JLabel(value.toString());
label.setJpaque(false);
Str|p8andunk http]]str|pbandunkcom]
139

if (sel) ,
label.setForeground(Color.#ED);
,
if (leaf) ,
label.setIcon(getLeafIcon());
, else if (expanded) ,
label.setIcon(getJpenIcon());
, else ,
label.setIcon(getClosedIcon());
,
return label;
,
,);
port.setView(tree);

final JScrollPane pane = new JScrollPane();
pane.setViewport(port);

setLayout(new BorderLayout());
add(pane);
setSize(400, 300);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
,
,


Gambar 103 1ree8ackground[ava
Cass
ada pembahasan !vleworL klLa sudah mencoba membuaL Class dlaLas !1exLArea sekarang klLa
akan mencoba membuaL Class dlaLas !1ree namun dengan formaL yang berbeda seperLl
sebelumnya ldenya klLa mau buaL gambar Lransparan dlaLas !1ree mlsal gambar pemandangan
aLau apalah Lerserah anda!!!
Maslh lngaL kan cara menggambar glass dalam !vleworL? 8eLul klLa harus mengoverlde
palnLChlldren()
Str|p8andunk http]]str|pbandunkcom]
160

1reeClass[ava
package pelajaran11;

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultTreeCellRenderer;

/
@author usu
/
public class TreeGlass extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new TreeGlass().setVisible(true);
,
,);
,

public TreeGlass() ,
super();

final JTree tree = new JTree();
tree.setJpaque(false);
tree.setCellRenderer(new DefaultTreeCellRenderer() ,

@Jverride
public Component getTreeCellRendererComponent(final JTree tree,
final Jbject value,
final boolean sel, final boolean expanded, final boolean
leaf, final int row,
final boolean hasFocus) ,
super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus);
final JLabel label = new JLabel(value.toString());
label.setJpaque(false);
if (sel) ,
label.setForeground(Color.#ED);
,
if (leaf) ,
label.setIcon(getLeafIcon());
, else if (expanded) ,
label.setIcon(getJpenIcon());
, else ,
Str|p8andunk http]]str|pbandunkcom]
161

label.setIcon(getClosedIcon());
,
return label;
,
,);

final JViewport port = new JViewport() ,

@Jverride
protected void paintChildren(Graphics g) ,
super.paintChildren(g);

Image image = new
ImageIcon(getClass().getResource("/pelajaran9/image.jpg")).getImage();

Graphics2D g2 = (Graphics2D) g.create();
g2.setComposite(AlphaComposite.SrcOver.derive(0.3F));

for (int i = 0; i < getWidth(); i += image.getWidth(null)) ,
for (int j = 0; j < getHeight(); j += image.getHeight(null))
,
g2.drawImage(image, i, j, null);
,
,
,

@Jverride
protected void paintComponent(Graphics g) ,
super.paintComponent(g);

GradientPaint paint = new GradientPaint(0, 0, Color.#ED, 0,
getHeight(), Color.LUE);

Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,
,;
port.setView(tree);

final JScrollPane pane = new JScrollPane();
pane.setViewport(port);

setLayout(new BorderLayout());
add(pane);
setSize(400, 300);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
,
,

Str|p8andunk http]]str|pbandunkcom]
162


Gambar 104 1reeG|ass[ava
Editor
Selaln render ada [uga saLu faslllLas yang dlmlllkl !1ree yalLu LdlLor LdlLor lnl berfungsl unLuk
mengedlL daLa yang dlLampung oleh !1ree 1apl secara defaulL sebuah !1ree Lak dapaL dledlL
sehlngga agar blsa dledlL klLa harus memanggll meLode seLLdlLable(Lrue) unLuk menseL edlLor ke
!1ree gunakan
l1ree tree new l1ree{)
treesetce//ditor{1reece//ditor editor)

1reeLdlLed[ava
package pelajaran11;

import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class TreeEdited extends JTree ,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeEdited()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

Str|p8andunk http]]str|pbandunkcom]
163

public TreeEdited() ,
super();
setEditable(true);
,
,


Gambar 10S 1reeLd|ted[ava
uan blasanya secara defaulL edlLor yang dlgunakan oleh !1ree adalah berupa !1exLlleld namun yang
men[adl kendala bagalmana [lka yang klLa perlukan adalah nllal boolean sehlngga Lak mungkln [lka
klLa menggunakan edlLor !1exLlleld karena yang leblh balk adalah menggunakan edlLor !Chek8ox
nah sekarang klLa akan bahas LenLang persoalan lLu
ComboBo
Sekarang mlsal klLa lngln membuaL edlLor dengan plllhan mlsalnya nllal yang dlmlllkl oleh !1ree harus
Lko" kurnlawan" aLau khannedy" nah hal lnl Lak balk [lka menggunakan edlLor defaulL oleh
karena lLu klLa leblh balk menggunakan edlLor !Combo8ox
Caranya adalah dengan menggunakan uefaulLCellLdlLor
uefou/tce//ditor editor new uefou/tce//ditor{new lcombo8ox{new 5trinq
ko kurniowon khonnedy
))

nah sekarang Llnggal menggunakan nya dalam !1ree
1reeLdlLedCombo8ox[ava
package pelajaran11;

import java.awt.BorderLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
Str|p8andunk http]]str|pbandunkcom]
164

import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class TreeEditedComboBox extends JTree ,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeEditedComboBox()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeEditedComboBox() ,
super();
setEditable(true);
final DefaultCellEditor editor = new DefaultCellEditor(new
JComboBox(new String, , "Eko",
"Kurniawan", "Khannedy" ,));
setCellEditor(editor);
,
,


Gambar 106 1reeLd|tedCombo8ox[ava
1ernyaLa gampang dan mengaslkkan kan?
CbWkBo
nah sekarang bagalmana [lka klLa lngln menggunakan !Chek8ox sebagal edlLornya 1apl sebelum
menggunakanna klLa harus Lahu dulu kalo !Chek8ox hanya dapaL mengemballkan nllal Lrue aLau
false !adl penggunaannya harus unLuk !1ree yang menampung daLa boolean
Str|p8andunk http]]str|pbandunkcom]
163

enggunaannya
uefou/tce//ditor editor new uefou/tce//ditor{new lcheck8ox{))

1reeLdlLedChek8ox[ava
package pelajaran11;

import java.awt.BorderLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import pelajaran1.Frame;

/
@author usu
/
public class TreeEditedChekBox extends JTree ,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeEditedChekBox()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeEditedChekBox() ,
super();
setEditable(true);
final DefaultCellEditor editor = new DefaultCellEditor(new
JCheckBox());
editor.setClickCountToStart(2);
setCellEditor(editor);
,
,

Str|p8andunk http]]str|pbandunkcom]
166


Gambar 107 1reeLd|tedChek8ox[ava
1apl alangkah balknya anda [uga menggunakan render !Chek8ox agar edlLor dan render LerllhaL
sama
Coor
uefaulLCellLdlLor hanya blsa menampung edlLor !Combo8ox !Chek8ox dan !1exLlleld Sehlngga [lka
klLa lngln membuaL edlLor unLuk Color klLa Lak blsa menggunakan uefaulLCellLdlLor oleh karena lLu
klLa harus membuaL edlLor secara manual 1apl Lenang gak susah kok hamplr mlrlp seperLl
membuaL render
ColorLdlLor[ava
package pelajaran11;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractCellEditor;
import javax.swing.JColorChooser;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellEditor;

/
@author usu
/
public class ColorEditor extends AbstractCellEditor implements
TreeCellEditor ,

private final JLabel label;
private JTree tree;
private Color warna;

public ColorEditor() ,
Str|p8andunk http]]str|pbandunkcom]
167

super();
this.label = new JLabel();
this.label.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseClicked(final MouseEvent e) ,
if (e.getClickCount() = 2) ,
final Color temp =
JColorChooser.shoDialo(ColorEditor.this.tree, "Choose Color",
ColorEditor.this.warna);
if (temp != null) ,
ColorEditor.this.warna = temp;
,
stopCellEditing();
,
,
,);
,

public Jbject getCellEditorValue() ,
return this.warna;
,

public Component getTreeCellEditorComponent(final JTree tree, final
Jbject value,
final boolean isSelected, final boolean expanded, final boolean
leaf, final int row) ,
this.warna = (Color) ((DefaultMutableTreeNode)
value).getUserJbject();
this.label.setJpaque(true);
this.label.setBackground(this.warna);
this.label.setText("Red:" + this.warna.getRed() + ", Green:" +
this.warna.getGreen()
+ ", Blue:" + this.warna.getBlue() + ", Alpha:" +
this.warna.getAlpha());
return this.label;
,
,

1reeColorLdlLor[ava
package pelajaran11;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import pelajaran1.Frame;

/
@author usu
/
public class TreeColorEditor extends JTree ,

public static void main(final String, usu) ,
final Frame frame = new Frame();
Str|p8andunk http]]str|pbandunkcom]
168

frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeColorEditor()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeColorEditor() ,
super();

final DefaultMutableTreeNode root = new
DefaultMutableTreeNode("RJJT");
root.add(new DefaultMutableTreeNode(Color.#ED));
root.add(new DefaultMutableTreeNode(Color.LACK));
root.add(new DefaultMutableTreeNode(Color.LUE));
root.add(new DefaultMutableTreeNode(Color.CYAN));
root.add(new DefaultMutableTreeNode(Color.DA#K_G#AY));
root.add(new DefaultMutableTreeNode(Color.G#AY));
root.add(new DefaultMutableTreeNode(Color.G#EEN));
root.add(new DefaultMutableTreeNode(Color.LIGHT_G#AY));
root.add(new DefaultMutableTreeNode(Color.AGENTA));
root.add(new DefaultMutableTreeNode(Color.O#ANGE));
root.add(new DefaultMutableTreeNode(Color.PINK));
root.add(new DefaultMutableTreeNode(Color.WHITE));
root.add(new DefaultMutableTreeNode(Color.YELLOW));

setModel(new DefaultTreeModel(root));

setCellRenderer(new ColorRender());
setCellEditor(new ColorEditor());
setEditable(true);
,
,


Gambar 108 1reeCo|orLd|tor[ava
!lka anda mendouble kllk salah saLu node maka akan keluar dlalog color chooser
Str|p8andunk http]]str|pbandunkcom]
169


Gambar 109 Co|or Ld|tor
!adl seperLl lLulah color edlLor Sebenarnya Lak harus seperLl lLu karena memang LerganLung gaya
anda sendlrl Lapl unLuk yang pallng slmple adalah seperLl lLu
FiW
1adl perLama kall membuaL render klLa membuaL render flle nah sekarang saaLnya klLa membuaL
sebuah LdlLor unLuk llle
llleLdlLor[ava
package pelajaran11;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.AbstractCellEditor;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellEditor;

/
@author usu
/
public class FileEditor extends AbstractCellEditor implements
TreeCellEditor ,

Str|p8andunk http]]str|pbandunkcom]
170

private final JFileChooser chooser;
private File file;
private final JLabel label;
private JTree tree;

public FileEditor() ,
super();
this.chooser = new JFileChooser();
this.label = new JLabel();
this.label.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseClicked(final MouseEvent e) ,
if (e.getClickCount() = 2) ,
if
(FileEditor.this.chooser.showJpenDialog(FileEditor.this.tree) ==
JFileChooser.APP#OVE_OPTION) ,
FileEditor.this.file =
FileEditor.this.chooser.getSelectedFile();
stopCellEditing();
, else ,
cancelCellEditing();
,
,
,
,);
,

public Jbject getCellEditorValue() ,
return this.file;
,

public Component getTreeCellEditorComponent(final JTree tree, final
Jbject value,
final boolean isSelected, final boolean expanded, final boolean
leaf, final int row) ,
this.file = (File) ((DefaultMutableTreeNode) value).getUserJbject();
this.tree = tree;
this.label.setText(this.file.getName());
this.label.setIcon(((JLabel) tree.getCellRenderer()).getIcon());
return this.label;
,
,

Sekarang buka kemball flle llle8ender[ava karena akan klLa gunakan lagl uan ayo sekarang buaL
!1ree unLuk llleLdlLor
1reellleLdlLor[ava
package pelajaran11;

import java.awt.BorderLayout;
import java.io.File;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import pelajaran1.Frame;
Str|p8andunk http]]str|pbandunkcom]
171


/
@author usu
/
public class TreeFileEditor extends JTree ,

public static final void insertNode(final DefaultMutableTreeNode node,
final File folder) ,
for (final File f : folder.listFiles()) ,
final DefaultMutableTreeNode child = new
DefaultMutableTreeNode(f);
if (f.isDirectory()) ,
TreeFileEditor.insertNode(child, f);
,
node.add(child);
,
,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeFileEditor()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeFileEditor() ,
super();

final DefaultMutableTreeNode root = new DefaultMutableTreeNode(new
File(".."));

TreeFileEditor.insertNode(root, new File(".."));

final DefaultTreeModel model = new DefaultTreeModel(root);
setModel(model);
setCellRenderer(new FileRender());
setCellEditor(new FileEditor());
setEditable(true);
,
,

Str|p8andunk http]]str|pbandunkcom]
172


Gambar 110 1reeI||eLd|tor[ava
uan [lka anda double kllk salah saLu nodenya maka akan keluar llleLdlLornya seperLl yang LerllhaL
dlbawah lnl

Gambar 111 I||e Ld|tor
Ws No Editor
ApaLuh yes no edlLor"? Maksud saya adalah sebuah edlLor yang memlllkl Lombol ?es dan no aLau
blsa dlganLl Cancel keLlka Lombol yes dlLekan maka perubahan akan dl slmpan sedangkan [lka
Lombol no dl Lekan maka perubahan akan dlbaLalkan uan saaL lnl anda akan mellhaL kehebaLan
!Wlndow
Str|p8andunk http]]str|pbandunkcom]
173

llleLdlLor?esno[ava
package pelajaran11;

import java.awt.Component;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.JWindow;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellEditor;

/
@author usu
/
public class FileEditorYesNo extends AbstractCellEditor implements
TreeCellEditor ,

private final JFileChooser chooser;
private File file;
private final JLabel label;
private JTree tree;
private final JWindow window;
private final JButton yes, no;

public FileEditorYesNo() ,
super();
this.chooser = new JFileChooser();

this.window = new JWindow();
this.window.setLayout(new GridLayout(1, 2));
this.window.setAlwaysJnTop(true);

this.yes = new JButton(" JK ");
this.yes.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
stopCellEditing();
,
,);

this.no = new JButton(" NJ ");
this.no.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
cancelCellEditing();
,
,);

this.window.add(this.yes);
this.window.add(this.no);
this.window.pack();
Str|p8andunk http]]str|pbandunkcom]
174


this.label = new JLabel();
this.label.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseClicked(final MouseEvent e) ,
if (e.getClickCount() = 2) ,
final Point p =
FileEditorYesNo.this.label.getLocationJnScreen();
p.y += FileEditorYesNo.this.label.getHeight();
FileEditorYesNo.this.window.setLocation(p);
FileEditorYesNo.this.window.setVisible(true);
if
(FileEditorYesNo.this.chooser.showJpenDialog(FileEditorYesNo.this.tree) ==
JFileChooser.APP#OVE_OPTION) ,
FileEditorYesNo.this.file =
FileEditorYesNo.this.chooser.getSelectedFile();

FileEditorYesNo.this.label.setText(FileEditorYesNo.this.file.getName());
,
,
,
,);
,

@Jverride
public void cancelCellEditing() ,
this.window.setVisible(false);
super.cancelCellEditing();
,

public Jbject getCellEditorValue() ,
return this.file;
,

public Component getTreeCellEditorComponent(final JTree tree, final
Jbject value,
final boolean isSelected, final boolean expanded, final boolean
leaf, final int row) ,
this.file = (File) ((DefaultMutableTreeNode) value).getUserJbject();
this.tree = tree;
this.label.setText(this.file.getName());
this.label.setIcon(((JLabel) tree.getCellRenderer()).getIcon());
return this.label;
,

@Jverride
public boolean stopCellEditing() ,
this.window.setVisible(false);
return super.stopCellEditing();
,
,

Sekarang klLa buaL !1reenya dan maslh seperLl Ladl gunakan llle8ender sebagal rendernya
1reellleLdlLor?esno[ava
package pelajaran11;

Str|p8andunk http]]str|pbandunkcom]
173

import java.awt.BorderLayout;
import java.io.File;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import pelajaran1.Frame;

/
@author usu
/
public class TreeFileEditorYesNo extends JTree ,

public static final void insertNode(final DefaultMutableTreeNode node,
final File folder) ,
for (final File f : folder.listFiles()) ,
final DefaultMutableTreeNode child = new
DefaultMutableTreeNode(f);
if (f.isDirectory()) ,
TreeFileEditorYesNo.insertNode(child, f);
,
node.add(child);
,
,

public static void main(final String, usu) ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TreeFileEditorYesNo()));
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
,

public TreeFileEditorYesNo() ,
super();

final DefaultMutableTreeNode root = new DefaultMutableTreeNode(new
File(".."));

TreeFileEditorYesNo.insertNode(root, new File(".."));

final DefaultTreeModel model = new DefaultTreeModel(root);
setModel(model);
setCellRenderer(new FileRender());
setCellEditor(new FileEditorYesNo());
setEditable(true);
,
,

Str|p8andunk http]]str|pbandunkcom]
176


Gambar 112 1reeI||eLd|toresNo[ava
!lka anda mendouble kllk sebuah node maka akan keluar llleLdlLornya

Gambar 113 I||e Ld|tor
Lalu anda plllh flle baru
Str|p8andunk http]]str|pbandunkcom]
177


Gambar 114 es No Ld|tor
Maka akan LerllhaL Lombol Ck dan nC dlbawah node yang Lelah anda edlL dan [lka seLu[u anda kllk
Ck dan [lka Lldak anda kllk nC mlsal saya kllk nC maka node akan kemball seperLl semula

Gambar 11S 1reeI||eLd|toresNo saat mem|||h NC
1apl [lka saya menekan Lombol Ck maka perubahan akan dlslmpan pada node !1ree yang Lelah anda
edlL
Str|p8andunk http]]str|pbandunkcom]
178


Gambar 116 1reeI||eLd|toresNo saat mem|||h LS
Sekarang anda Lahukan kalo !Wlndow lLu sangaL berguna sekall Selaln sebelumnya klLa [elaskan
seperLl Splash Screen AbouL Screen Wlndow 1lp LernyaLa !Wlndow [uga blsa dlgunakan sebagal
pembanLu dalam !1ree ulbab selan[uLnya [uga !Wlndow akan dlperlukan khususnya dalam !1able
KWsimpuan
8lngung nlh narlk keslmpulannya ?ang pasLl slch LxLC8L C8LA1lvl1AS AnuA" salah saLunya
penggunaan !Wlndow dalam !1ree LdlLor adalah hasll renungan saya dl depan lapLop hahaha


Str|p8andunk http]]str|pbandunkcom]
179

Wa|aran
TabW
kalo ngomong soal Label pasLl sudah Lak aslng lagl dlkalangan para Swlnger karena memang
kebanyakan user berkuLlL dl !1able kenapa? Selaln !1able adalah komponen swlng yang pallng
komplex dalam arLlan yang pallng sullL !1able [uga sangaL eraL kalLannya dengan daLabase
1apl dalam buku lnl saya Lak akan menga[ak anda berpuslng rla Lapl menga[ak anda mengexplolLasl
daya plklr anda unLuk membuaL !1able yang sangan menarlk sehlngga end user nyaman dan senang
berlamalama memandang apllkasl yang klLa buaL
RWndWr
Pamplr saya seperLl !1ree !1able [uga kebanyakan akan klLa bahas dalam 8ender dan LdlLor !adl [lka
anda sudah paham dengan pen[elasan dl !1ree Ladl saya [amln pasLl anda [uga akan lulus dengan
mudah dalam pen[elasan !1able kall lnl
unLuk menseL render dalam !1able klLa gunakan kode dlbawah lnl
l1ob/eqetco/umnMode/{)qetco/umn{int index)setce//kenderer{1ob/ece//kenderer render)

Coor
Lagl lagl Color yach lLung lLung pemanasan dulu hahaha
8enderColor[ava
package pelajaran12;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderColor implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table, final
Jbject value,
final boolean isSelected, final boolean hasFocus, final int row,
final int column) ,
final Color warna = (Color) value;
final JLabel label = new JLabel();
label.setJpaque(true);
if (isSelected) ,
label.setBackground(table.getSelectionBackground());
label.setForeground(warna);
, else ,
label.setBackground(warna);
label.setForeground(table.getForeground());
Str|p8andunk http]]str|pbandunkcom]
180

,
label.setText("Red:" + warna.getRed() + ", Green:" + warna.getGreen()
+ ", Blue:"
+ warna.getBlue() + ", Alpha:" + warna.getAlpha());
return label;
,
,

SeLelah buaL 8endernya sekarang Llnngal buaL !1ablenya
1ableColor[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableColor extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableColor()));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableColor() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("WARNA");
model.addRow(new Jbject, , Color.#ED ,);
model.addRow(new Jbject, , Color.G#EEN ,);
model.addRow(new Jbject, , Color.G#AY ,);
model.addRow(new Jbject, , Color.CYAN ,);
model.addRow(new Jbject, , Color.LUE ,);
setModel(model);
getColumnModel().getColumn(0).setCellRenderer(new RenderColor());
,
,

Str|p8andunk http]]str|pbandunkcom]
181


Gambar 117 1ab|eCo|or[ava
CradiWnt
kall lnl klLa akan membuaL efek gradlenL yang berkeslnambungan unLuk !1able sehlngga laLar cell
LerllhaL leblh lndah dlpandang ulLls bangeL bahasanya?
CradlenL8ender[ava
package pelajaran12;

import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class GradientRender implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table, final
Jbject value,
final boolean isSelected, final boolean hasFocus, final int row,
final int column) ,
JLabel label = null;
if (row % 2 == 0) ,
label = new JLabel(value.toString()) ,

@Jverride
protected void paintComponent(final Graphics g) ,
final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(0, 0, Color.G#EEN, 0,
getHeight(), Color.YELLOW));
g2.fillRect(0, 0, getWidth(), getHeight());
Str|p8andunk http]]str|pbandunkcom]
182

super.paintComponent(g);
,
,;
, else ,
label = new JLabel(value.toString()) ,

@Jverride
protected void paintComponent(final Graphics g) ,
final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(0, 0, Color.YELLOW, 0,
getHeight(), Color.G#EEN));
g2.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
,
,;
,
label.setJpaque(false);

if (isSelected) ,
label.setForeground(Color.#ED);
, else ,
label.setForeground(table.getForeground());
,

return label;
,
,

1ableCradlenL[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableGradient extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableGradient()));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
Str|p8andunk http]]str|pbandunkcom]
183

,

public TableGradient() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("FJNT");
for (final String f :
GraphicsEnvironment.etLocalGraphicsEnvironment()
.getAvailableFontFamilyNames()) ,
model.addRow(new Jbject, , f ,);
,
setModel(model);
getColumnModel().getColumn(0).setCellRenderer(new GradientRender());
setShowHorizontalLines(false);
setShowVerticalLines(false);
super.setRowMargin(0);
,
,


Gambar 118 1ab|eGrad|ent[ava
NWtBWans
Ck Ladl klLa membuaL render yang sangaL slmple yach lLunglLung pemanasan Sekarang maugak
mau anda yang pake Lcllpse harus plndah luL ke neL8eans dulu karena Lcllpse Lak memlllkl Cul
8ullder seperLl neL8eans
Sekarang klLa mulal dengan membuaL Label yang berlslkan alamaLalamaL Ck sekarang klLa buaL
class alamaL sebagal penampung daLa SaaL lnl saya buaL yang slmple a[a Lapl saaL prakLek lLu slh
Lerserah anda
AlamaL[ava
package pelajaran12;

/
Str|p8andunk http]]str|pbandunkcom]
184

@author usu
/
public class Alamat ,

private String alamat;
private String email;
private String nama;

public Alamat(final String nama, final String alamat, final String
email) ,
this.nama = nama;
this.alamat = alamat;
this.email = email;
,

public String getAlamat() ,
return this.alamat;
,

public String getEmail() ,
return this.email;
,

public String getNama() ,
return this.nama;
,

public void setAlamat(final String alamat) ,
this.alamat = alamat;
,

public void setEmail(final String email) ,
this.email = email;
,

public void setNama(final String nama) ,
this.nama = nama;
,
,

Sekarang anda buaL sebuah panel seperLl gambar dlbawah menggunakan neL8eans anda [uga blsa
menemukannya dalam pro[ecL SwlngMakeCver
anelAlamaL[ava

Gambar 119 ane|A|amat[ava
SeLelah lLu buaL panel lagl unLuk menampung daLa alamaL
anelAlamaL2[ava
Str|p8andunk http]]str|pbandunkcom]
183


Gambar 120 ane|A|amat2[ava
SeLelah lLu buaL meLode pada anelAlamaL[ava
pub/ic void setNome{5trinq nome)
textNomoset1ext{nome)


pub/ic void setmoi/{5trinq emoi/)
textmoi/set1ext{emoi/)


uan seLelah lLu buaL [uga meLode dlbawah lnl pada anelAlamaL2[ava
pub/ic void set4/omot{5trinq o/omot)
text4/omotset1ext{o/omot)


Sekarang Llnggal buaL dua buah Cell 8ender karena klLa akan membuaL dua kolom
8enderAlamaL1[ava
package pelajaran12;

import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderAlamat1 implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table, final
Jbject value,
final boolean isSelected, final boolean hasFocus, final int row,
final int column) ,
final Alamat alamat = (Alamat) value;

final PanelAlamat panel = new PanelAlamat();
panel.setName(alamat.getNama());
panel.setEmail(alamat.getEmail());

if (isSelected) ,
panel.setBackground(table.getSelectionBackground());
, else ,
panel.setBackground(table.getBackground());
,

Str|p8andunk http]]str|pbandunkcom]
186

return panel;
,
,

8enderAlamaL2[ava
package pelajaran12;

import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderAlamat2 implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table, final
Jbject value,
final boolean isSelected, final boolean hasFocus, final int row,
final int column) ,
final Alamat alamat = (Alamat) value;

final PanelAlamat2 panel = new PanelAlamat2();
panel.setAlamat(alamat.getAlamat());

if (isSelected) ,
panel.setBackground(table.getSelectionBackground());
, else ,
panel.setBackground(table.getBackground());
,

return panel;
,
,

Sekarang Llnggal membuaL !1able yang akan menggunakan render Ladl
1ableAlamaL[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableAlamat extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

Str|p8andunk http]]str|pbandunkcom]
187

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableAlamat()));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableAlamat() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Data");
model.addColumn("Alamat");

for (int i = 0; i < 30; i++) ,
final Alamat data = new Alamat("Eko Kurniawan Khannedy",
"Kalijati, Subang",
"echo.khannedy@gmail.com");
model.addRow(new Jbject, , data, data ,);
,

setModel(model);
getColumnModel().getColumn(0).setCellRenderer(new RenderAlamat1());
getColumnModel().getColumn(1).setCellRenderer(new RenderAlamat2());
setRowHeight(70);
getColumnModel().getColumn(0).setMinWidth(400);
getColumnModel().getColumn(1).setMinWidth(400);
setAutoResizeMode(JTable.AUTO_#ESIZE_OFF);
,
,


Gambar 121 1ab|eA|amat[ava
Str|p8andunk http]]str|pbandunkcom]
188


Gambar 122 1ab|eA|amat[ava
Puhul leblh Ck kan kellhaLannya darl pada Label blasa Walaupun kodenya agak pan[ang Lapl kan
yang penLlng hasllnya bung!
Ch ya ballk lagl ke luL kalo anda udah clnLa maLl ama Lcllpse leblh balk gunakan Cul 8ulldernya
Lcllpse yang graLls yalLu vlsualLdlLor Lapl buaL nglnsLallnya emang agak rlbeL Lerlalu banyak plugln
yang harus LerlnsLall dl Lcllpsenya 1apl kalo pengen yang lnsLan mendlng pake LasyLcllpse
8allk lagl ke yang Ladl bagalmana? Maslh kurang keren Ck sekarang klLa buaL yang benerbener
LxLreem
!anel klLa buaL gradlenL Lrus !1exLlleldnya klLa buaL keren beken
anelCool[ava
package pelajaran12;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.Point;
import javax.swing.JPanel;

/
@author usu
/
public class PanelCool extends JPanel ,

private boolean reverse;

public PanelCool() ,
super();
,

public boolean isReverse() ,
return this.reverse;
,

Str|p8andunk http]]str|pbandunkcom]
189

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Point start = new Point(0, 0);
final Point end = new Point(0, getHeight());
final float, fractions = new float, , 0F, 0.5F, 1f ,;
Color, colors = null;
if (isReverse()) ,
colors = new Color, , Color.#ED, Color.LACK, Color.#ED ,;
, else ,
colors = new Color, , Color.LACK, Color.#ED, Color.LACK ,;
,
final LinearGradientPaint paint = new LinearGradientPaint(start, end,
fractions, colors);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,

public void setReverse(final boolean reverse) ,
this.reverse = reverse;
repaint();
,
,


Lalu buaL flle baru lewaL menu llle new llle
Str|p8andunk http]]str|pbandunkcom]
190


Gambar 123 New I||e
lllh Swlng Cul lorms lalu plllh 8ean lorm
Str|p8andunk http]]str|pbandunkcom]
191


Gambar 124 New 8ean Iorm
8erl nama dengan anelAlamaLCool"
Str|p8andunk http]]str|pbandunkcom]
192


Gambar 12S New I||e
Masukan superclassnya pela[aran12anelCool"

Gambar 126 Net8eans GUI 8u||der
Str|p8andunk http]]str|pbandunkcom]
193

Sekarang LerllhaL gul edlLor unLuk panel cool dl maLLlse gul bullder mlllk neL8eans uan sekarnag
Llnggal buaL !1exLlleld baru yang Cool
1exLlleldCool[ava
package pelajaran12;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

/
@author usu
/
public class TextFieldCool extends JTextField ,

public TextFieldCool() ,
super();
setBorder(new EmptyBorder(new Insets(5, 5, 5, 5)));
setJpaque(false);
setFont(getFont().deriveFont(Font.OLD));
setForeground(Color.hite);
,

@Jverride
protected void paintComponent(final Graphics g) ,

GradientPaint paint = new GradientPaint(0, 0, Color.LACK, 0,
getHeight(), Color.LUE);
final Shape shape = new RoundRectangle2D.Double(0, 0, getWidth(),
getHeight(), getHeight(),
getHeight());

final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setComposite(AlphaComposite.SrcOver.derive(0.8F));
g2.setPaint(paint);
g2.fill(shape);

final Color dark = new Color(1F, 1F, 1F, 0F);
final Color light = new Color(1F, 1F, 1F, 0.4F);
paint = new GradientPaint(0, 0, light, 0, getHeight() / 2, dark);

g2.setPaint(paint);
g2.fill(shape);

super.paintComponent(g);
,
,

Str|p8andunk http]]str|pbandunkcom]
194

Sekarang kemball ke cool panel gul edlLor Lrus buka dock palleLe dan kllk Lombol Chose 8ean"

Gambar 127 Choose 8ean
1rus akan keluar dlalog [awa bean

Gambar 128 Choose 8ean
Masukkan pela[aran121exLlleldCool" dan Ck

Gambar 129 1amp||an GUI 8u||der
Sekarang anda bebas unLuk mendesaln panel sesukan anda Mlsal saya menggunakan desaln sLandar
seperLl dlbawah lnl

Gambar 130 1amp||an akh|r render
uan sekarang Lambahkan meLode dlbawah lnl pada class anelAlamaLCool[ava nya
Str|p8andunk http]]str|pbandunkcom]
193

pub/ic void setuoto{4/omot doto)
textNomoset1ext{dotoqetNomo{))
textmoi/set1ext{dotoqetmoi/{))
text4/omotset1ext{dotoqet4/omot{))


Sekarang klLa buaL render buaL Labelnya ayo semanggaL!!!
8enderAlamaLCool[ava
package pelajaran12;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderColor implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table, final
Jbject value,
final boolean isSelected, final boolean hasFocus, final int row,
final int column) ,
final Color warna = (Color) value;
final JLabel label = new JLabel();
label.setJpaque(true);
if (isSelected) ,
label.setBackground(table.getSelectionBackground());
label.setForeground(warna);
, else ,
label.setBackground(warna);
label.setForeground(table.getForeground());
,
label.setText("Red:" + warna.getRed() + ", Green:" + warna.getGreen()
+ ", Blue:"
+ warna.getBlue() + ", Alpha:" + warna.getAlpha());
return label;
,
,

Ck Lahap Lerakhlr klLa buaL !1ablenya LeL's Lx18LLM!!!
1ableAlamaLCool[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
Str|p8andunk http]]str|pbandunkcom]
196

import pelajaran1.Frame;

/
@author usu
/
public class TableAlamatCool extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableAlamatCool()));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableAlamatCool() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Data Tabel");

for (int i = 0; i < 30; i++) ,
final Alamat data = new Alamat("Eko Kurniawan Khannedy",
"Kalijati, Subang",
"echo.khannedy@gmail.com");
model.addRow(new Jbject, , data ,);
,

setModel(model);
getColumnModel().getColumn(0).setCellRenderer(new
RenderAlamatCool());
setRowHeight(106);
setRowMargin(0);
,
,

Str|p8andunk http]]str|pbandunkcom]
197


Gambar 131 1ab|eA|amatCoo|[ava

ulh akhlrnya selesal [uga ?ach beglnllah kalo mau Lx18LLM harus ada pengorbanan
Sekarang apa lagl yach? Pmmm glmana kalo klLa buaL background dengan !vleworL [adl
backgroundnya gak seperLl pada gambar dlaLas Ck leL's 8CCk!!!
vleworLCool[ava
package pelajaran12;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JViewport;

/
@author usu
/
public class ViewPortCool extends JViewport ,

public ViewPortCool() ,
super();
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GradientPaint paint = new GradientPaint(0, 0, Color.G#EEN, 0,
getHeight(), Color.YELLOW);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,
Str|p8andunk http]]str|pbandunkcom]
198


,

SeLelah lLu buaLlah panel unLuk rendernya menggunakan MaLLlse Cul 8ulldernya neL8eans
anelvleworL[ava

Gambar 132 ane|I|ewort[ava
Sekarang klLa buaL kode unLuk menerlma class AlamaL pada anelvleworL[ava
pub/ic void setuoto{4/omot doto)
text4/omotset1ext{dotoqet4/omot{))
textmoi/set1ext{dotoqetmoi/{))
textNomoset1ext{dotoqetNomo{))


Sekarang klLa buaL rendernya
8endervleworL[ava
package pelajaran12;

import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderViewPort implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table, final
Jbject value,
final boolean isSelected, final boolean hasFocus, final int row,
final int column) ,
final Alamat data = (Alamat) value;

final PanelViewPort panel = new PanelViewPort();
panel.setJpaque(false);
panel.setData(data);

return panel;
,
,

Str|p8andunk http]]str|pbandunkcom]
199

Ck sekarang Lahap Lerakhlr klLa buaL !1ablenya dan lngaL gunakan vleworL yang Lelah klLa buaL
sebelumnya
1ableAlamaLvleworL[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableAlamatViewPort extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());

final TableAlamatViewPort table = new TableAlamatViewPort();
table.setJpaque(false);

final ViewPortCool port = new ViewPortCool();
port.setView(table);

final JScrollPane pane = new JScrollPane();
pane.setViewport(port);
pane.setJpaque(false);

frame.add(pane);
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableAlamatViewPort() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Data Tabel");

for (int i = 0; i < 30; i++) ,
final Alamat data = new Alamat("Eko Kurniawan Khannedy",
"Kalijati, Subang",
"echo.khannedy@gmail.com");
model.addRow(new Jbject, , data ,);
,

setModel(model);
Str|p8andunk http]]str|pbandunkcom]
200

getColumnModel().getColumn(0).setCellRenderer(new RenderViewPort());
setRowHeight(126);
setRowMargin(0);
,
,


Gambar 133 1ab|eA|amatI|ewort[ava
!adl seperLl lLulah Leknlk unLuk membauL Lampllan yang beda darl sebuah !1able uan yang Lak kalah
penLlng lagl saya dlslnl hanya memanclng daya kreaLlvlLas anda unLuk leblh berkreasl darl conLoh
conLoh yang saya Lulls dalam buku lnl keep LxLreem!
Editor
?up layaknya !1ree !1able pun memlllkl LdlLor Lapl bedanya !1ree hanya dapaL menampung saLu
edlLor Lapl !1able boleh leblh darl saLu edlLor LerganLung banyak kolom Lapl syaraLnya saLu kolom
harus memlllkl saLu edlLor
ComboBo
Sebagal permulaan klLa buaL yang sederhana dulu
1ableLdlLorCombo8ox[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
Str|p8andunk http]]str|pbandunkcom]
201

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

/
@author usu
/
public class TableEditorComboBox extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new JScrollPane(new TableEditorComboBox()));
frame.setVisible(true);
,
,);
,

public TableEditorComboBox() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Jenis Kelamin");

for (int i = 0; i < 100; i++) ,
model.addRow(new String, , "Eko Kurniawan Khannedy", "Laki -
Laki" ,);
,

setModel(model);

getColumnModel().getColumn(0).setCellEditor(
new DefaultCellEditor(new JTextField()));
getColumnModel().getColumn(1).setCellEditor(
new DefaultCellEditor(new JComboBox(new String, , "Laki -
Laki",
"Wanita" ,)));
,
,

Str|p8andunk http]]str|pbandunkcom]
202


Gambar 134 1ab|eLd|torCombo8ox[ava
Pahaha LernyaLa sama a[a seperLl membuaL edlLor unLuk !1ree! !adl gampang kan?
CbWkBo
emanasan lagl sekarang klLa buaL chekbox unLuk edlLornya
1ableLdlLorChek8ox[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

/
@author usu
/
public class TableEditorChekBox extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new JScrollPane(new TableEditorChekBox()));
frame.setVisible(true);
Str|p8andunk http]]str|pbandunkcom]
203

,
,);
,

public TableEditorChekBox() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Jenis Kelamin");
model.addColumn("Menikah");

for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy", "Laki -
Laki",
false ,);
,

setModel(model);

getColumnModel().getColumn(0).setCellEditor(
new DefaultCellEditor(new JTextField()));
getColumnModel().getColumn(1).setCellEditor(
new DefaultCellEditor(new JComboBox(new String, , "Laki -
Laki",
"Wanita" ,)));
getColumnModel().getColumn(2).setCellEditor(
new DefaultCellEditor(new JCheckBox()));
,
,


Gambar 13S 1ab|eLd|torChek8ox[ava
Wah Lapl kayaknya kellhaLan sangaL formal glmana kalo klLa buaL yang LxLreem kalo gak mau sklp
a[a subbab lnl Lapl saya saranln baca seluruh buku lnl Lanpa LerlewaL sedlklLpun
Mula mula klLa buaL dulu Lampllan render unLuk nama
Str|p8andunk http]]str|pbandunkcom]
204


Gambar 136 ane| render nama
!angan lupa menggunakan meLode dlbawah lnl
pub/ic void setNomo{5trinq nomo)
textNomoset1ext{nomo)


Sekarang klLa buaL Lampllan unLuk [enls kelamln

Gambar 137 ane| render [en|ske|am|n
!angan lupa buaL meLodemeLode dlbawah lnl
pub/ic void setlenike/omin{5trinq leniske/omin)
textleniske/ominset1ext{leniske/omin)
if {leniske/ominequo/s{wonito))
/obe/leniske/ominsetlcon{new
lmoqelcon{qetc/oss{)qetkesource{/pe/ojoron12/womenpnq)))
e/se
/obe/leniske/ominsetlcon{new
lmoqelcon{qetc/oss{)qetkesource{/pe/ojoron12/Menpnq)))



Sekarang klLa buaL Lampllan unLuk sLaLus menlkah

Gambar 138 ane| render men|kah
!angan lupa membuaL meLode lnl
pub/ic void setMenikoh{boo/eon menikoh)
if {menikoh)
textMenikohset1ext{5udoh Menikoh)
/obe/Menikohsetlcon{new lmoqelcon{qetc/oss{)qetkesource{/pe/ojoron12/Okpnq)))
e/se
Str|p8andunk http]]str|pbandunkcom]
203

textMenikohset1ext{8e/um Menikoh)
/obe/Menikohsetlcon{new lmoqelcon{qetc/oss{)qetkesource{/pe/ojoron12/NOpnq)))



Ck sekarang klLa Llnggal membuaL rendernya karena ada Llga kolom maka klLa akan membuaL Llga
render
8endernama[ava
package pelajaran12;

import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderNama implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table,
final Jbject value, final boolean isSelected, final boolean
hasFocus,
final int row, final int column) ,
final String data = (String) value;

final TampilanNama tampilan = new TampilanNama();
tampilan.setNama(data);

if (isSelected) ,
tampilan.setJpaque(true);
tampilan.setBackground(table.getSelectionBackground());
, else ,
tampilan.setJpaque(false);
,

return tampilan;
,
,

8ender!enlskelamln[ava
package pelajaran12;

import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderJenisKelamin implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table,
final Jbject value, final boolean isSelected, final boolean
Str|p8andunk http]]str|pbandunkcom]
206

hasFocus,
final int row, final int column) ,
String data = "Laki - Laki";
if (value != null) ,
data = (String) value;
,

final TampilanJenisKelamin tampilan = new TampilanJenisKelamin();
tampilan.setJeniKelamin(data);

if (isSelected) ,
tampilan.setJpaque(true);
tampilan.setBackground(table.getSelectionBackground());
, else ,
tampilan.setJpaque(false);
,

return tampilan;
,
,

8enderMenlkah[ava
package pelajaran12;

import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/
@author usu
/
public class RenderMenikah implements TableCellRenderer ,

public Component getTableCellRendererComponent(final JTable table,
final Jbject value, final boolean isSelected, final boolean
hasFocus,
final int row, final int column) ,
boolean data = false;
if (value != null) ,
data = Boolean.val:eOf(value.toString()).booleanValue();
,

final TampilanMenikah tampilan = new TampilanMenikah();
tampilan.setMenikah(data);

if (isSelected) ,
tampilan.setJpaque(true);
tampilan.setBackground(table.getSelectionBackground());
, else ,
tampilan.setJpaque(false);
,

return tampilan;
,
,

Sekarang klLa buaL !vleworL gradlenL buaL Lampllan background Label
Str|p8andunk http]]str|pbandunkcom]
207

vleworLCool2[ava
package pelajaran12;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JViewport;

/
@author usu
/
public class ViewPortCool2 extends JViewport ,

public ViewPortCool2() ,
super();
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GradientPaint paint = new GradientPaint(0, 0, Color.G#EEN,
getWidth(), getHeight(), Color.YELLOW);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,
,

Ck sekarang Llnggal buaL !1ablenya
1ableLdlLorSLyllsL[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

/
@author usu
/
public class TableEditorStylist extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
Str|p8andunk http]]str|pbandunkcom]
208

final JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setSize(400, 300);
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);

final TableEditorStylist table = new TableEditorStylist();
table.setJpaque(false);

final ViewPortCool2 port = new ViewPortCool2();
port.setView(table);

final JScrollPane pane = new JScrollPane();
pane.setJpaque(false);
pane.setViewport(port);

frame.add(pane);
frame.setVisible(true);
,
,);
,

public TableEditorStylist() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Jenis Kelamin");
model.addColumn("Menikah");

for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy", "Laki -
Laki",
false ,);
,

setModel(model);

getColumnModel().getColumn(0).setCellRenderer(new RenderNama());
getColumnModel().getColumn(1).setCellRenderer(new
RenderJenisKelamin());
getColumnModel().getColumn(2).setCellRenderer(new RenderMenikah());

final DefaultCellEditor editorNama = new DefaultCellEditor(
new JTextField());
editorNama.setClickCountToStart(2);
getColumnModel().getColumn(0).setCellEditor(editorNama);

final DefaultCellEditor editorJenisKelamin = new DefaultCellEditor(
new JComboBox(new String, , "Laki - Laki", "Wanita" ,));
editorJenisKelamin.setClickCountToStart(2);
getColumnModel().getColumn(1).setCellEditor(editorJenisKelamin);

final DefaultCellEditor editorMenikah = new DefaultCellEditor(
new JCheckBox("Menikah."));
editorMenikah.setClickCountToStart(2);
getColumnModel().getColumn(2).setCellEditor(editorMenikah);

setAutoResizeMode(JTable.AUTO_#ESIZE_OFF);

setRowHeight(54);
for (int i = 0; i < getColumnCount(); i++) ,
Str|p8andunk http]]str|pbandunkcom]
209

getColumnModel().getColumn(i).setMinWidth(300);
,
,
,


Gambar 139 1ab|eLd|torSty||st saat menged|t nama

Gambar 140 1ab|eLd|torSty||st saat menged|t [en|s ke|am|n
Str|p8andunk http]]str|pbandunkcom]
210


Gambar 141 1ab|eLd|torSty||st saat menged|t men|kah
Puh akhlrnya selesal [uga
Coor
Sampal saaL lnl uefaulLCellLdlLor hanya mendukung edlLor !Chek8ox !Combo8ox dan !1exLlleld
sehlngga klLa klLa lngln membuaL edlLor unLuk warna flle aLau gambar klLa harus membuaLnya
sendlrl Sekarang klLa coba membauL edlLor unLuk Color !lka anda sudah menguasal penggunaan
edlLor color pada !1ree anda pasLl mudah memahaml edlLor Color unLuk !1able karena hamplr sama
penggunaannya
Sekarang klLa buaL edlLornya
ColorLdlLor[ava
package pelajaran12;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractCellEditor;
import javax.swing.JColorChooser;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

/
@author usu
/
public class ColorEditor extends AbstractCellEditor implements
TableCellEditor ,

private final JLabel label;
private JTable table;
private Color warna;

public ColorEditor() ,
super();
this.label = new JLabel();
Str|p8andunk http]]str|pbandunkcom]
211

this.label.setJpaque(true);
this.label.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseClicked(final MouseEvent e) ,
if (e.getClickCount() = 2) ,
final Color temp = JColorChooser.shoDialo(
ColorEditor.this.table, "Color Editor",
ColorEditor.this.warna);
if (temp != null) ,
ColorEditor.this.warna = temp;
,
stopCellEditing();
,
,
,);
,

public Jbject getCellEditorValue() ,
return this.warna;
,

public Component getTableCellEditorComponent(final JTable table,
final Jbject value, final boolean isSelected, final int row,
final int column) ,
this.table = table;
this.warna = (Color) value;
this.label.setBackground(this.warna);
return this.label;
,
,

Sekarang klLa buaL !1ablenya
1ableColorLdlLor[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableColorEditor extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableColorEditor()));
Str|p8andunk http]]str|pbandunkcom]
212

frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableColorEditor() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("NAMA");
model.addColumn("WARNA FAVJRIT");
model.addRow(new Jbject, , "Eko Kurniawan", Color.#ED ,);
model.addRow(new Jbject, , "Eko Kurniawan", Color.G#EEN ,);
model.addRow(new Jbject, , "Eko Kurniawan", Color.G#AY ,);
model.addRow(new Jbject, , "Eko Kurniawan", Color.CYAN ,);
model.addRow(new Jbject, , "Eko Kurniawan", Color.LUE ,);
setModel(model);
getColumnModel().getColumn(1).setCellRenderer(new RenderColor());
getColumnModel().getColumn(1).setCellEditor(new ColorEditor());
,
,


Gambar 142 1ab|eCo|orLd|tor[ava
!lka klLa double kllk salah saLu kolom warna favorlL maka akan keluar Color LdlLor
Str|p8andunk http]]str|pbandunkcom]
213


Gambar 143 Co|or Ld|tor
SpinnWr
Wah selama lnl saya [arang menylnggung !Splnner Lapl sekarang saya akan buaL edlLor unLuk !1able
yang menamfaaLkan !Splnner
umbWr
kall lnl klLa akan membuaL edlLor nomber dengan menggunakan !Splnner
numberLdlLor[ava
package pelajaran12;

import java.awt.Component;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.EventJbject;
import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JWindow;
import javax.swing.SpinnerNumberModel;
import javax.swing.table.TableCellEditor;

/
@author usu
Str|p8andunk http]]str|pbandunkcom]
214

/
public class NumberEditor extends AbstractCellEditor implements
TableCellEditor ,

private Integer number;
private final JButton ok, no;
private final JSpinner spinner;
private final JWindow window;

public NumberEditor() ,
super();
this.spinner = new JSpinner(new SpinnerNumberModel(0, null, null,
1));
this.window = new JWindow();
this.ok = new JButton("JK");
this.ok.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
try ,
NumberEditor.this.spinner.commitEdit();
, catch (final ParseException ex) ,
// ERRJR
, finally ,
NumberEditor.this.number = new
Integer(NumberEditor.this.spinner
.getValue().toString());
stopCellEditing();
,
,
,);
this.no = new JButton("NJ");
this.no.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
cancelCellEditing();
,
,);
this.window.setLayout(new GridLayout(1, 2));
this.window.add(this.ok);
this.window.add(this.no);
this.window.setAlwaysJnTop(true);
,

@Jverride
public void cancelCellEditing() ,
this.window.setVisible(false);
super.cancelCellEditing();
,

public Jbject getCellEditorValue() ,
return this.number;
,

public Component getTableCellEditorComponent(final JTable table,
final Jbject value, final boolean isSelected, final int row,
final int column) ,
this.number = new Integer(value.toString());
this.spinner.setValue(value);
return this.spinner;
,

Str|p8andunk http]]str|pbandunkcom]
213

@Jverride
public boolean shouldSelectCell(final EventJbject anEvent) ,
final Point p = this.spinner.getLocationJnScreen();
p.y += this.spinner.getHeight();
this.window.setLocation(p);
this.window.pack();
this.window.setVisible(true);
return super.shouldSelectCell(anEvent);
,

@Jverride
public boolean stopCellEditing() ,
this.window.setVisible(false);
return super.stopCellEditing();
,
,

Sekarang klLa buaL !1ablenya
1ablenumberLdlLor[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableNumberEditor extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableNumberEditor()));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableNumberEditor() ,
super();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("NAMA");
model.addColumn("UMUR");
model.addRow(new Jbject, , "Eko Kurniawan", new Integer(19) ,);
model.addRow(new Jbject, , "Eko Kurniawan", new Integer(19) ,);
Str|p8andunk http]]str|pbandunkcom]
216

model.addRow(new Jbject, , "Eko Kurniawan", new Integer(19) ,);
model.addRow(new Jbject, , "Eko Kurniawan", new Integer(19) ,);
model.addRow(new Jbject, , "Eko Kurniawan", new Integer(19) ,);
setModel(model);
getColumnModel().getColumn(1).setCellEditor(new NumberEditor());
,
,


Gambar 144 1ab|eNumberLd|tor[ava
uan [lka klLa mengedlL kolom umur maka akan keluar number LdlLor

Gambar 14S 1ab|eNumberLd|tor saat menged|t umur
uan lagl lagl dlslnl saya menggunakan !Wlndow unLuk menampllkan Lombol Ck dan no
Custom Editor
kadang klLa mendapaLkan sebuah Label yang menylmpan daLa berupa class yang dlbuaL sendlrl
(dalam arLl Lak ada dalam sLandar apl [ava) sehlngga mau gak mau klLa harus membuaL sebuah
edlLor yang cocok dengan daLa class LersebuL Mlsalkan sa[a klLa akan mengedlL sebuah AlamaL yang
sebelumnya klLa pernah buaL
Sebelumnya klLa buaL anel edlLornya
anelLdlLorAlamaL[ava
Str|p8andunk http]]str|pbandunkcom]
217


Gambar 146 ane| ed|tor a|amat
Sekarang buaL meLode dlbawah lnl
pub/ic void set4/omor{4/omot doto)
text4/omotset1ext{dotoqet4/omot{))
textmoi/set1ext{dotoqetmoi/{))
textNomoset1ext{dotoqetNomo{))


pub/ic 4/omot qet4/omot{)
return new 4/omot{textNomoqet1ext{)
text4/omotqet1ext{) textmoi/qet1ext{))


Ck sekarang klLa Llnggal buaL edlLornya
AlamaLLdlLor[ava
package pelajaran12;

import java.awt.Component;
import java.util.EventJbject;

import javax.swing.AbstractCellEditor;
import javax.swing.JJptionPane;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

/
@author usu
/
public class AlamatEditor extends AbstractCellEditor implements
TableCellEditor ,

private Alamat alamat;
private final PanelEditorAlamat panel;
private final PanelAlamatCool panelCool;

public AlamatEditor() ,
this.panel = new PanelEditorAlamat();
this.panelCool = new PanelAlamatCool();
,

Str|p8andunk http]]str|pbandunkcom]
218

public Jbject getCellEditorValue() ,
return this.alamat;
,

public Component getTableCellEditorComponent(final JTable table,
final Jbject value, final boolean isSelected, final int row,
final int column) ,
this.alamat = (Alamat) value;
this.panel.setAlamar(this.alamat);
this.panelCool.setData(this.alamat);
return this.panelCool;
,

@Jverride
public boolean shouldSelectCell(final EventJbject anEvent) ,
JJptionPane.shoessaeDialo(null, this.panel);
this.alamat = this.panel.getAlamat();
stopCellEditing();
return super.shouldSelectCell(anEvent);
,
,

uan Lerakhlr klLa buaL !1ablenya
1ableAlamaLCoolLdlLor[ava
package pelajaran12;

import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import pelajaran1.Frame;

/
@author usu
/
public class TableAlamatCoolEditor extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableAlamatCoolEditor()));
frame.pack();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

public TableAlamatCoolEditor() ,
super();

Str|p8andunk http]]str|pbandunkcom]
219

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Data Tabel");

for (int i = 0; i < 30; i++) ,
final Alamat data = new Alamat("Eko Kurniawan Khannedy",
"Kalijati, Subang", "echo.khannedy@gmail.com");
model.addRow(new Jbject, , data ,);
,

setModel(model);
getColumnModel().getColumn(0).setCellRenderer(new
RenderAlamatCool());
getColumnModel().getColumn(0).setCellEditor(new AlamatEditor());
setRowHeight(106);
setRowMargin(0);
,
,


Gambar 147 1ab|eA|amatCoo|Ld|tor[ava
!lka klLa kllk salah saLu cellnya maka akan keluar AlamaL LdlLor
Str|p8andunk http]]str|pbandunkcom]
220


Gambar 148 Ld|tor A|amat
tbWr
Selaln 8ender dan LdlLor maslh banyak lagl exLreem Lrlx yang blsa klLa gunakan dalam !1able uan
pada subbab selan[uLnya klLa akan menlnggalkan render dan edlLor klLa akan leblh fokus ke
8owSorLer dan 1ableModel
SortWr
ada !ava versl 13 ke bawah sebuah !1able Lak blsa dluruLkan Lapl se[ak !ava 16 !1able sudah
dapaL dluruLkan sekarang klLa coba unLuk menguruLkan !1able
MeLode yang baru pada versl 16 adalah seL8owSorLer() meLode lnl dlgunakan unLuk membuaL
!1able agar blsa melakukan sorLlng
1ableSorLer[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

/
@author usu
/
public class TableSorter extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
Str|p8andunk http]]str|pbandunkcom]
221

frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableSorter()));
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

private final Random generator;

private final TableRowSorter<DefaultTableModel sorter;

public TableSorter() ,
super();

this.generator = new Random();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Umur");
for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy",
this.generator.nextInt(40) ,);
,

this.sorter = new TableRowSorter<DefaultTableModel(model);

setModel(model);
setRowSorter(this.sorter);
,
,


Gambar 149 1ab|eSorter[ava
uengan mengkllk kolom headernya klLa blsa mensorLlng colom LersebuL berdasarkan ascendlng aLau
descendlng
Str|p8andunk http]]str|pbandunkcom]
222


Gambar 1S0 1ab|eSorter saat terurut secara ascend|ng

Gambar 1S1 1ab|eSorter saat mengurut secara descend|ng
SeperLlnya ada yang kesalahan dalam sorLlngnya 8owSorLer secara defaulL mensorL dalam nllal
SLrlng [adl [lka ada 39 dan 9 maka menuruL 8owSorLer leblh besar 9 Cleh karena lLu klLa harus
membuaL ComparaLor sendlrl karena dalam kolom umur Lypenya lnLeger maka klLa buaL
ComparaLor lnLeger
1ableSorLerCood[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.util.Comparator;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
Str|p8andunk http]]str|pbandunkcom]
223

import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

/
@author usu
/
public class TableSorterGood extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new TableSorterGood()));
frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

private final Random generator;

private final TableRowSorter<DefaultTableModel sorter;

public TableSorterGood() ,
super();

this.generator = new Random();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Umur");
for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy",
new Integer(this.generator.nextInt(40)) ,);
,

this.sorter = new TableRowSorter<DefaultTableModel(model);
this.sorter.setComparator(1, new Comparator<Integer() ,

public int compare(final Integer o1, final Integer o2) ,
return o1.compareTo(o2);
,
,);

setModel(model);
setRowSorter(this.sorter);
,
,

Sekarang 8owSorLer Lak akan salah lagl menguruLkan lnLeger
Str|p8andunk http]]str|pbandunkcom]
224


Gambar 1S2 1ab|eSorterGood saat mengurut ascend|ng

Gambar 1S3 1ab|eSorterGood saat mengurut descend|ng
FitWr
Selaln menguruLkan kolom 8owSorLer [uga memlllkl kemampuan unLuk memfllLer daLa klLa pernah
membuaL LlsLModel yang dapaL memfllLer dalam bab !LlsL nah sekarang klLa gak perlu susahsusah
membuaL 1ableModel yang blsa memfllLer karena sudah dlhandle oleh 8owSorLer
unLuk memfllLer 8owSorLer gunakan meLode lnl
sortersetkowli/ter{kowli/terreqexli/ter{5trinq key))

1ableSorLerlllLer[ava
Str|p8andunk http]]str|pbandunkcom]
223

package pelajaran12;

import java.awt.BorderLayout;
import java.util.Comparator;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

/
@author usu
/
public class TableSorterFilter extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());

final TableSorterFilter table = new TableSorterFilter();
frame.add(new JScrollPane(table));

final JTextField text = new JTextField();
text.getDocument().addDocumentListener(new DocumentListener() ,

public void changedUpdate(final DocumentEvent e) ,
table.setFilter(text.getText());
,

public void insertUpdate(final DocumentEvent e) ,
table.setFilter(text.getText());
,

public void removeUpdate(final DocumentEvent e) ,
table.setFilter(text.getText());
,
,);
frame.add(text, BorderLayout.NO#TH);

frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

private final Random generator;
private final TableRowSorter<DefaultTableModel sorter;

public TableSorterFilter() ,
super();
Str|p8andunk http]]str|pbandunkcom]
226


this.generator = new Random();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Umur");
for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy",
new Integer(this.generator.nextInt(40)) ,);
,

this.sorter = new TableRowSorter<DefaultTableModel(model);
this.sorter.setComparator(1, new Comparator<Integer() ,

public int compare(final Integer o1, final Integer o2) ,
return o1.compareTo(o2);
,
,);

setModel(model);
setRowSorter(this.sorter);
,

public void setFilter(final String key) ,
this.sorter.setRowFilter(RowFilter.reexFilter(key));
,
,


Gambar 1S4 1ab|eSorterI||ter[ava
Sekarang [lka klLa lnpuLkan sebuah key ke LexLfleld maka oLomaLls 8owSorLer akan memfllLer !1able
Str|p8andunk http]]str|pbandunkcom]
227


Gambar 1SS 1ab|eSorterI||ter saat d|f||ter
MiUrosoft EUW dan pWnffiUW CaU
kall lnl klLa akan berallh ke 1ableModel klLa akan mencoba mengkomunlkaslkan !1able dengan MS
Lxcel dan CC Calc Mlsal kasusnya klLa mau membuaL laporan darl sebuah !1able dengan
menggunakan Lxcel aLau Calc uan salah saLu Leknlk yang blsa klLa gunakan adalah lewaL flle CSv
(Comma SeparaLe values)
Sebelumnya klLa buaL llbrary unLuk mengexporL ke CSv
1able1ool[ava
package pelajaran12;

import java.io.File;
import java.io.IJException;
import java.io.PrintWriter;
import javax.swing.table.TableModel;

/
@author usu
/
public class TableTool ,

public static final void exportToCSV(final TableModel model,
final File target, final String separator) throws IJException ,

final PrintWriter writer = new PrintWriter(target);

for (int j = 0; j < model.getColumnCount(); j++) ,
writer.print(model.getColumnName(j));
writer.print(separator);
,

writer.print("\n");

for (int j = 0; j < model.getRowCount(); j++) ,
Str|p8andunk http]]str|pbandunkcom]
228

for (int k = 0; k < model.getColumnCount(); k++) ,
writer.print(model.getValueAt(j, k));
writer.print(separator);
,
writer.print("\n");
,

writer.close();

,
,

uan sekarang klLa buaL !1able yang memanfaaLkan 1able1ool[ava
1ableCSv[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IJException;
import java.util.Comparator;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

/
@author usu
/
public class TableCSV extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());

final TableCSV table = new TableCSV();
frame.add(new JScrollPane(table));

final JFileChooser chooser = new JFileChooser();

final JButton button = new JButton("EXPJRT");
button.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
if (chooser.showSaveDialog(frame) ==
JFileChooser.APP#OVE_OPTION) ,
Str|p8andunk http]]str|pbandunkcom]
229

try ,
File f = chooser.getSelectedFile();
f = new File(f.getPath() + ".CSV");
TableTool.exportToCSV(table.getModel(), f, "\t");
, catch (final IJException ex) ,
// ERRJR
,
,
,
,);

frame.add(button, BorderLayout.NO#TH);

frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

private final Random generator;

private final TableRowSorter<DefaultTableModel sorter;

public TableCSV() ,
super();

this.generator = new Random();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Umur");
for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy",
new Integer(this.generator.nextInt(40)) ,);
,

this.sorter = new TableRowSorter<DefaultTableModel(model);
this.sorter.setComparator(1, new Comparator<Integer() ,

public int compare(final Integer o1, final Integer o2) ,
return o1.compareTo(o2);
,
,);

setModel(model);
setRowSorter(this.sorter);
,
,

unLuk kode dlaLas saya gunakan separaLor L" yang arLlnya 1ab anda [uga blsa menggunakan
separaLor (spasl) aLau yang seklranya balk unLuk anda gunakan
Str|p8andunk http]]str|pbandunkcom]
230


Gambar 1S6 1ab|eCSI[ava
!lka klLa Lekan Lombol LxC81 maka akan keluar llleChooser

Gambar 1S7 Save D|a|og
Lalu anda save daLa CSvnya mlsal saya slmpan dl ueskLop dengan nama uA1A
Str|p8andunk http]]str|pbandunkcom]
231


Gambar 1S8 I||e CSI
Sekarang blsa klLa llhaL fllenya dl ueskLop
lcroxoft OfflcW FxcWl
Sekarang bagalmana caranya menggunakan flle Ladl ke Lxcel erLama buka apllkasl MS Lxcel saya
menggunakan MS Lxcel 2007

Gambar 1S9 M|crosoft Cff|ve Lxce| 2007
Lalu masuk ke Lab uaLa CeL LxLernal uaLa
Str|p8andunk http]]str|pbandunkcom]
232


Gambar 160 M|crosoft Cff|ce Lxce| 2007
Lalu plllh lrom 1exL"

Gambar 161 Get Lxterna| Data
uan plllh flle Ladl
Str|p8andunk http]]str|pbandunkcom]
233


Gambar 162 Import 1ext I||e
Sekarang akan Lampll dlalog CSv lllh uellmlLed" dan nexL
Str|p8andunk http]]str|pbandunkcom]
234


Gambar 163 1ext Import W|zard
Ceklls 1ab" aLau sesual dengan separaLor yang Ladl anda gunakan
Str|p8andunk http]]str|pbandunkcom]
233


Gambar 164 1ext Import W|zard
1enLukan [enls daLa sesual denga yang anda lnglnkan
Str|p8andunk http]]str|pbandunkcom]
236


Gambar 16S 1ext Import W|zard
uan kllk llnlsh" dan LenLukan lokasl LempaL Label CSv akan dlbuaL

Gambar 166 Import Data
uan Ck sekarang daLa dalam !1able Ladl Lelah ada dalam MS Lxcel
Str|p8andunk http]]str|pbandunkcom]
237


Gambar 167 M|crosoft Cff|ce Lxce| 2007
OpWnOfflcW Culc
Sekarang klLa akan menggunakan CpenCfflce Calc unLuk membuka flle CSv Ladl erLama Lama
buka apllkasl CpenCfflce Calc
Str|p8andunk http]]str|pbandunkcom]
238


Gambar 168 CpenCff|ce Ca|c
Lalu buka flle CSv Ladl lewaL menu llle Cpen

Gambar 169 Menu Cpen
uan plllh flle CSvnya
Str|p8andunk http]]str|pbandunkcom]
239


Gambar 170 Cpen D|a|og
Sekarang akan keluar Lampllan seLLlng SeLLlng lah sesual dengan yang anda lnglnkan Lapl [angan
lupa unLuk menenLukan separaLed by" dengan separaLor yang Ladl anda gunakan conLohnya Ladl
saya menggunakan 1ab
Str|p8andunk http]]str|pbandunkcom]
240


Gambar 171 1ext Import
uan Ck

Gambar 172 CpenCff|ce Ca|c
Str|p8andunk http]]str|pbandunkcom]
241

Sekarang daLa dalam !1able Ladl ada dl CpenCfflce Calc
TML
Sekarang klLa akan membahas Lrlk unLuk mengexporL daLa darl !1able ke sebuah flle P1ML Ck
supaya Lak banyak flle yang klLa gunakan leblh balk klLa edlL 1able1ool[ava agar dapaL mengexporL
daLa darl !1able ke P1ML
1able1ool[ava
package pelajaran12;

import java.io.File;
import java.io.IJException;
import java.io.PrintWriter;
import javax.swing.table.TableModel;

/
@author usu
/
public class TableTool ,

public static final void exportToCSV(final TableModel model,
final File target, final String separator) throws IJException ,

final PrintWriter writer = new PrintWriter(target);

for (int j = 0; j < model.getColumnCount(); j++) ,
writer.print(model.getColumnName(j));
writer.print(separator);
,

writer.print("\n");

for (int j = 0; j < model.getRowCount(); j++) ,
for (int k = 0; k < model.getColumnCount(); k++) ,
writer.print(model.getValueAt(j, k));
writer.print(separator);
,
writer.print("\n");
,

writer.close();

,

public static final void exportToHTML(final TableModel model,
final File target) throws IJException ,

final PrintWriter writer = new PrintWriter(target);

writer.write("<HTML<BJDY<TABLE BJRDER ='1'");

writer.write("<TR");
for (int j = 0; j < model.getColumnCount(); j++) ,
writer.write("<TD");
writer.print(model.getColumnName(j));
writer.write("</TD");
,
Str|p8andunk http]]str|pbandunkcom]
242

writer.write("</TR");

for (int j = 0; j < model.getRowCount(); j++) ,
writer.write("<TR");
for (int k = 0; k < model.getColumnCount(); k++) ,
writer.write("<TD");
writer.print(model.getValueAt(j, k));
writer.write("</TD");
,
writer.write("</TR");
,

writer.write("</TABLE</BJDY</HTML");
writer.close();

,
,

Ck dan sekarng Llnggal buaL !1ablenya
1ableP1ML[ava
package pelajaran12;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IJException;
import java.util.Comparator;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

/
@author usu
/
public class TableHTML extends JTable ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
final JFrame frame = new JFrame();
frame.setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());

final TableHTML table = new TableHTML();
frame.add(new JScrollPane(table));

final JFileChooser chooser = new JFileChooser();

Str|p8andunk http]]str|pbandunkcom]
243

final JButton button = new JButton("EXPJRT");
button.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
if (chooser.showSaveDialog(frame) ==
JFileChooser.APP#OVE_OPTION) ,
try ,
File f = chooser.getSelectedFile();
f = new File(f.getPath() + ".HTML");
TableTool.exportToHTL(table.getModel(), f);
, catch (final IJException ex) ,
// ERRJR
,
,
,
,);

frame.add(button, BorderLayout.NO#TH);

frame.setSize(400, 300);
frame.setVisible(true);
,
,);
,

private final Random generator;

private final TableRowSorter<DefaultTableModel sorter;

public TableHTML() ,
super();

this.generator = new Random();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Umur");
for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy",
new Integer(this.generator.nextInt(40)) ,);
,

this.sorter = new TableRowSorter<DefaultTableModel(model);
this.sorter.setComparator(1, new Comparator<Integer() ,

public int compare(final Integer o1, final Integer o2) ,
return o1.compareTo(o2);
,
,);

setModel(model);
setRowSorter(this.sorter);
,
,

Str|p8andunk http]]str|pbandunkcom]
244


Gambar 173 1ab|en1ML[ava
kllk Lombol LxC81 maka akan ada llleChoser unLuk mensave flle P1ML

Gambar 174 Save D|a|og
Mlsal saya save flle hLmlnya dl ueskLop maka akan LerllhaL flle hasllsavenya dl ueskLop
Str|p8andunk http]]str|pbandunkcom]
243


Gambar 17S I||e n1ML
Sekarang Llnggal anda buka flle LersebuL menggunakan browser yang anda mlllkl

Gambar 176 Moz|||a I|refox
KWsimpuan
Puh mungkln !1able adalah salah saLu baglan yang pallng sullL unLuk dlexpose karena memang
Lerlalu banyak Lrlx yang blsa klLa buaL menggunakan !1able !adl mulal saaL lnl buaLlah render dan
edlLor yang lnLerakLlf unLuk !1able anda agar end user leblh dlman[akan oleh apllkasl yang anda
buaL

Str|p8andunk http]]str|pbandunkcom]
246

Wa|aran
TWtanW
Salah saLu perbedaan !1exLane dan !1exLArea adalah formaL uocumenL !1exLArea menggunakan
lalnuocumenL sedangkan !1exLane menggunakan SLyleduocumenL nah makanya !1exLArea hanya
blsa menampung saLu sLyle berbeda dengan !1exLane yang blsa menampung banyak sLyle
igbigbt
Ck salah saLu keleblhan !1exLane adalah PlghllghL Sekarang klLa akan mewarnal Leks yang ada dl
dalam !1exLane dengan hlghLllghL
unLuk menambah hlghLllghL ke !1exLane gunakan kode lnl
textPoneqetniqh/iqhter{)oddniqh/iqht{int p1 int p2 niqh/iqhtPointer pointer)

uan unLuk menghapus seluruh hlghLllghL
textPoneqetniqh/iqhter{)remove4//niqh/iqhts{)

Sekarang klLa buaL conLohnya
1exLanePlghLLlghL[ava
package pelajaran13;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter;

/
@author usu
/
public class TextPaneHightLight extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new TextPaneHightLight().setVisible(true);
,
,);
,
Str|p8andunk http]]str|pbandunkcom]
247


public static final void setHightLight(final String key,
final JTextPane pane, final Color color) ,
try ,
int index = 0;
final String total = pane.getDocument().getText(0,
pane.getDocument().getLength());

pane.getHighlighter().removeAllHighlights();
while ((index = total.indexJf(key, index)) 0) ,
final DefaultHighlightPainter painter = new
DefaultHighlightPainter(
color);
pane.getHighlighter().addHighlight(index, index + key.length(),
painter);
index += key.length();
,
, catch (final BadLocationException ex) ,
// ERRJR
,
,

public TextPaneHightLight() ,
super();

final JTextPane textPane = new JTextPane();

final JTextField text = new JTextField();
text.getDocument().addDocumentListener(new DocumentListener() ,

public void changedUpdate(final DocumentEvent e) ,
TextPaneHightLight.setHihtLiht(text.getText(), textPane,
Color.G#EEN);
,

public void insertUpdate(final DocumentEvent e) ,
TextPaneHightLight.setHihtLiht(text.getText(), textPane,
Color.G#EEN);
,

public void removeUpdate(final DocumentEvent e) ,
TextPaneHightLight.setHihtLiht(text.getText(), textPane,
Color.G#EEN);
,
,);

setLayout(new BorderLayout());
add(text, BorderLayout.NO#TH);
add(new JScrollPane(textPane));
setSize(400, 300);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
,
,

Str|p8andunk http]]str|pbandunkcom]
248


Gambar 177 1extanen|ghtL|ght[ava
Sekarang klLa lnpuLkan huruf a" maka hlghLllgLer akan mewarnal huruf a"

Gambar 178 1extanen|ghtL|ght saat h|ght||ght


Str|p8andunk http]]str|pbandunkcom]
249

Wa|aran
CassanW
Paha lnllah bab yang pallng saya sukal! kenapa? karena Classane adalah salah saLu kea[alban
Swlng yang [arang sarang Lemul dl bahasa pemrograman vlsual yang laln 8agl yang baru mendengar
apa lLu Classane marl klLa llhaL gambar dlbawah lnl

Gambar 179 os|s| G|assane
!adl Classane lLu merupakan salah saLu baglan !lrame aLaupun !ulalog yang berapa pada uruLan
pallng aLas dan blasanya Classane lLu Lranparan
CradiWnt Cass
Sekarang conLoh klLa buaL glasspane yang menampllkan gambar gradlenL
ClassaneCradlenL[ava
package pelajaran14;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;

/
@author usu
/
public class GlassPaneGradient extends JPanel ,

public GlassPaneGradient() ,
super();
setJpaque(false);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

Str|p8andunk http]]str|pbandunkcom]
230

final GradientPaint paint = new GradientPaint(0, 0, Color.YELLOW,
getWidth(), getHeight(), Color.G#EEN);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.setComposite(AlphaComposite.SrcOver.derive(0.3F));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
,
,

uan sekarang Llnggal menggunakannya ke !lrame unLuk menggunakan Classane gunakan kode
seperLl dlbawah lnl
6/ossPone6rodient q/osspone new 6/ossPone6rodient{)
fromeset6/ossPone{q/osspone)
fromeqet6/ossPone{)setvisib/e{true)

ClassaneCradlenLApp[ava

Gambar 180 G|assaneGrad|entApp[ava
ClassaneCradlenL2[ava
package pelajaran14;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import javax.swing.JPanel;

/
@author usu
/
public class GlassPaneGradient2 extends JPanel ,

public GlassPaneGradient2() ,
super();
setJpaque(false);
,

Str|p8andunk http]]str|pbandunkcom]
231

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GradientPaint paint = new GradientPaint(0, 0, Color.YELLOW,
getWidth(), getHeight(), Color.G#EEN);
final GeneralPath path = new GeneralPath();
path.moveTo(0, 0);
path.lineTo(0, getHeight());
path.curveTo(0, getHeight(), getWidth() / 5, getHeight() / 5,
getWidth(),
0);
path.closePath();

final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(paint);
g2.setComposite(AlphaComposite.SrcOver.derive(0.3F));
g2.fill(path);
g2.dispose();
,
,

ClassaneCradlenL2App[ava

Gambar 181 G|assaneGrad|ent2App[ava
Clmana? keren kan? ?ach lLulah kegunaan Classane unLuk membuaL efekefek dlaLas komponen
komponen
BoUk EbWnt
Selaln sebagal hlasan salah saLu kemampuan Classane adalah memblock evenL unLuk komponenL
komponenL yang adan dl !lrame
Classane8lock[ava
package pelajaran14;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import javax.swing.JPanel;

Str|p8andunk http]]str|pbandunkcom]
232

/
@author usu
/
public class GlassPaneBlock extends JPanel ,

private final MouseAdapter adapter1 = new MouseAdapter() ,
,;
private final KeyAdapter adapter2 = new KeyAdapter() ,
,;
private boolean block;

public GlassPaneBlock() ,
super();
setBlock(false);
setJpaque(false);
,

public boolean isBlock() ,
return this.block;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (isBlock()) ,
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(1F, 1F, 1F, 0.6F));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
,
,

public void setBlock(final boolean block) ,
this.block = block;
if (block) ,
addMouseListener(this.adapter1);
addKeyListener(this.adapter2);
, else ,
removeMouseListener(this.adapter1);
removeKeyListener(this.adapter2);
,
repaint();
,
,

unLuk penggunaannya seperLl glasspane sebelumnya uan unLuk membloknya gunakan
6/ossponeset8/ock{true)

uan unLuk menunblock gunakan
6/ossponeset8/ock{fo/se)

Str|p8andunk http]]str|pbandunkcom]
233


Gambar 182 Iorm yang menggunakan G|assane8|ock
uan saaL dl block

Gambar 183 Saat form d|b|ock o|eh G|assane8|ock
Classane8lock2[ava
package pelajaran14;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

/
@author usu
/
public class GlassPaneBlock2 extends JPanel ,

private final MouseAdapter adapter1 = new MouseAdapter() ,
,;
private final KeyAdapter adapter2 = new KeyAdapter() ,
,;
private boolean block;
Str|p8andunk http]]str|pbandunkcom]
234

private final Image image;

public GlassPaneBlock2() ,
super();
setBlock(false);
setJpaque(false);
this.image = new ImageIcon(getClass()
.getResource("/pelajaran14/stop.png")).getImage();
,

public boolean isBlock() ,
return this.block;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (isBlock()) ,
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(1F, 1F, 1F, 0.6F));
g2.fillRect(0, 0, getWidth(), getHeight());
if (this.image != null) ,
final Point p = new Point(getWidth() -
this.image.getWidth(null),
getHeight() - this.image.getHeight(null));
g2.drawImage(this.image, p.x, p.y, null);
,
g2.dispose();
,
,

public void setBlock(final boolean block) ,
this.block = block;
if (block) ,
addMouseListener(this.adapter1);
addKeyListener(this.adapter2);
, else ,
removeMouseListener(this.adapter1);
removeKeyListener(this.adapter2);
,
repaint();
,
,

Classane8lock2App[ava
Str|p8andunk http]]str|pbandunkcom]
233


Gambar 184 G|assane8|ock2App[ava

Gambar 18S G|assane8|ock2App saat d|b|ock
ada saaL dlblock seluruh evenL balk lLu mengkllk buLLon mengeLlk LexLfleld akan dlbloklr oleh
Classane unLuk source kode conLoh apllkasl dlaLas blsa anda llhaL dl pro[ecL SwlngMakeCver
Warning CassanW
8eglnl arLlnya glasspane dapaL menampllkan gambar warnlng dlaLas sebuah komponen
ClassaneWarnlng[ava
package pelajaran14;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/
@author usu
/
public class GlassPaneWarning extends JPanel ,

Str|p8andunk http]]str|pbandunkcom]
236

private final ArrayList<Component data = new ArrayList<Component();
private final Image warning;

public GlassPaneWarning() ,
super();
setJpaque(false);
this.warning = new ImageIcon(getClass().getResource(
"/pelajaran14/warning.png")).getImage();
,

public void addWarning(final Component e) ,
this.data.add(e);
repaint();
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (this.data.size() 0) ,
for (final Component c : this.data) ,
if (this.warning != null) ,
final Point p = c.getLocationJnScreen();
SwingUtilities.convertPointFromScreen(p, this);
g.drawImage(this.warning, p.x - this.warning.getWidth(null),
p.y, null);
,
,
,
,

public void removeWarning(final Jbject o) ,
this.data.remove(o);
repaint();
,
,

unLuk menambah gambar warnlng dl aLas ComponenL anda Llnggal menggunakan kode
6/ossponeoddworninq{component c)

uan unLuk menghllangkan warnlng anda Llnggal menggunakan kode
6/ossponeremoveworninq{component c)

ConLoh nya pada ClassaneWarnlngApp[ava yang dapaL anda llhaL dl pro[ecL SwlngMakeCver
Str|p8andunk http]]str|pbandunkcom]
237


Gambar 186 Iorm yang menggunakan G|assaneWarn|ng
!lka 1exLlleld Lelah Lerlsl Leks maka gambar warnlng akan menghllang

Gambar 187 Iorm yang menggunakan G|assaneWarn|ng
CassanW Transition
Selaln efek yang sLaLls glasspane [uga blsa dlbuaL unLuk efek yang dlnamls ConLohnya klLa akan
membuaL efek Lranslsl menggunakan glasspane uan lagl lagl klLa sekarang memanfaaLkan 1lmlng
lrameWork
Classane1ranslLlon[ava
package pelajaran14;

import java.awt.AWTException;
import java.awt.AlphaComposite;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;
import javax.swing.SwingUtilities;

import org.jdesktop.animation.timing.Animator;
import org.jdesktop.animation.timing.interpolation.PropertySetter;

/
@author usu
/
public class GlassPaneTransition extends JComponent ,

private float alpha;
private final Animator animasi;
private Component comp;
Str|p8andunk http]]str|pbandunkcom]
238

private BufferedImage image;
private Robot rbt;

public GlassPaneTransition() ,
super();
this.alpha = 1.0f;
this.animasi = new Animator(1000);
this.animasi.addTarget(new PropertySetter(this, "alpha", 0.0f));
this.animasi.setAcceleration(0.2f);
this.animasi.setDeceleration(0.4f);
,

public float getAlpha() ,
return this.alpha;
,

public Robot getRobot() throws AWTException ,
if (this.rbt == null) ,
this.rbt = new Robot();
,
return this.rbt;
,

public boolean isProgress() ,
return this.animasi.isRunning();
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);
if (this.image != null) ,
final Graphics2D g2 = (Graphics2D) g.create();
final Point p = SwingUtilities.convertPoint(this.comp, 0, 0,
this);
g2.setComposite(AlphaComposite.SrcOver.derive(this.alpha));
g2.drawImage(this.image, (int) p.getX(), (int) p.getY(), null);
,
,

public void setAlpha(final float alpha) ,
this.alpha = alpha;
repaint();
if (alpha < 0.1) ,
setVisible(false);
,
,

public void setTime(final int time) ,
this.animasi.setDuration(time);
,

public void startTransition(final Component comp) throws AWTException ,
if (comp == null) ,
return;
,
if (!comp.isVisible()) ,
return;
,
if (this.animasi.isRunning() == false) ,
setVisible(true);
this.alpha = 1.0f;
Str|p8andunk http]]str|pbandunkcom]
239

this.comp = comp;
this.image = getRobot().createScreenCapture(
new Rectangle(this.comp.getLocationJnScreen(), this.comp
.getSize()));
this.animasi.start();
,
,
,

uan unLuk melakukan Lranslsl klLa cukup menggunakan meLode
ClasspanesLarL1ranslLlon(ComponenL c)

Maka secara oLomaLls Classpane akan melakukan Lranslsl dlaLas componenL LersebuL

Gambar 188 Iorm yang menggunakan G|assane1rans|t|on
Str|p8andunk http]]str|pbandunkcom]
260


Gambar 189 Saat G|assane1rans|t|on memu|a| trans|s|
Anda blsa mellhaL proses Lranslslnya pada gambar ke 2 keLlka darl Lab4 akan berplndah ke Lab3
unLuk source code dlaLas anda blsa llhaL dl pro[ecL SwlngMakeCver yang bernama
Classane1ranslLlonApp1[ava
CassanW Transition
Selaln Lranslsl alpha Classpane [uga blsa melakukan Lranslsl roLasl
Classane1ranslLlon8oLasl[ava
package pelajaran14;

import java.awt.AWTException;
import java.awt.AlphaComposite;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import org.jdesktop.animation.timing.Animator;
import org.jdesktop.animation.timing.interpolation.PropertySetter;

/
@author usu
/
public class GlassPaneTransitionRotasi extends JComponent ,
Str|p8andunk http]]str|pbandunkcom]
261


private float alpha;
private final Animator animasi;
private Point centerPoint;
private Component comp;
private BufferedImage image;
private Robot rbt;

public GlassPaneTransitionRotasi() ,
super();
this.alpha = 1.0f;
this.animasi = new Animator(1000);
this.animasi.addTarget(new PropertySetter(this, "alpha", 0.0f));
this.animasi.setAcceleration(0.2f);
this.animasi.setDeceleration(0.4f);
,

public float getAlpha() ,
return this.alpha;
,

public Robot getRobot() throws AWTException ,
if (this.rbt == null) ,
this.rbt = new Robot();
,
return this.rbt;
,

public boolean isProgress() ,
return this.animasi.isRunning();
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);
if (this.image != null) ,
final Graphics2D g2 = (Graphics2D) g.create();
final Point p = SwingUtilities.convertPoint(this.comp, 0, 0,
this);
final Point p2 = SwingUtilities.convertPoint(this.comp,
this.centerPoint, this);
g2.rotate(Math.to#adians((1 - this.alpha) 100), p2.x, p2.y);
g2.setComposite(AlphaComposite.SrcOver.derive(this.alpha));
g2.drawImage(this.image, (int) p.getX(), (int) p.getY(), null);
,
,

public void setAlpha(final float alpha) ,
this.alpha = alpha;
repaint();
if (alpha < 0.1) ,
setVisible(false);
,
,

public void setTime(final int time) ,
this.animasi.setDuration(time);
,

public void startTransition(final Component comp) throws AWTException ,
if (comp == null) ,
Str|p8andunk http]]str|pbandunkcom]
262

return;
,
if (!comp.isVisible()) ,
return;
,
if (this.animasi.isRunning() == false) ,
setVisible(true);
this.alpha = 1.0f;
this.comp = comp;
this.centerPoint = new Point(comp.getX() + comp.getWidth() / 2,
comp
.getY()
+ comp.getHeight() / 2);
this.image = getRobot().createScreenCapture(
new Rectangle(this.comp.getLocationJnScreen(), this.comp
.getSize()));
this.animasi.start();
,
,
,


Gambar 190 Iorm yang menggunakan G|assane1rans|t|onkotas|
Str|p8andunk http]]str|pbandunkcom]
263


Gambar 191 Saat G|assane1rans|t|onkotas| memu|a| trans|s|
SaaL proses Lranslsl maka Classpane akan memperllhaLkan Lranslsl secara roLasl Anda blsa mellhaL
source codenya dl pro[ecL SwlngMakeCver pada flle Classane1ranslLlonApp8oLaLlon[ava
Sebenarnya maslh banyak lagl Leknlk Lranslsl yang blsa dlgunakan menggunakan Classane Lapl saya
gak blsa menullsnya saLu persaLu karena Lerlalu banyak saya sebuL sa[a mlsalnya Lranslsl
menghllang ke klrl kanan aLas bawah aLau dlagonal
CassanW dan TabW
Ada saLu Lrlx yang blsa klLa gunakan unLuk !1able dan Classane yalLu Lranslsl sorLer !adl keLlka
melakukan penguruLan Lerhadap !1able maka efek Classane khususnya Lranslsl akan Lampll
1able1ranslLlon[ava
package pelajaran14;

import java.awt.AWTException;
import javax.swing.event.RowSorterEvent;
import java.awt.BorderLayout;
import java.util.Comparator;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.RowSorterListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
Str|p8andunk http]]str|pbandunkcom]
264


/
@author usu
/
public class TableTransition extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new TableTransition().setVisible(true);
,
,);
,

private final Random generator;
private final GlassPaneTransition glasspane;
private final TableRowSorter<DefaultTableModel sorter;

private final JTable table;

public TableTransition() ,
super();

this.table = new JTable();
this.generator = new Random();
this.glasspane = new GlassPaneTransition();

final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Nama");
model.addColumn("Umur");
for (int i = 0; i < 100; i++) ,
model.addRow(new Jbject, , "Eko Kurniawan Khannedy",
new Integer(this.generator.nextInt(40)) ,);
,

this.sorter = new TableRowSorter<DefaultTableModel(model);
this.sorter.setComparator(1, new Comparator<Integer() ,

public int compare(final Integer o1, final Integer o2) ,
return o1.compareTo(o2);
,
,);
this.sorter.addRowSorterListener(new RowSorterListener() ,

public void sorterChanged(final RowSorterEvent e) ,
try ,
TableTransition.this.glasspane
.startTransition(TableTransition.this.table);
, catch (final AWTException ex) ,
// ERRJR
,
,
,);

this.table.setModel(model);
this.table.setRowSorter(this.sorter);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new JScrollPane(this.table));
setSize(400, 300);
Str|p8andunk http]]str|pbandunkcom]
263

setGlassPane(this.glasspane);
,
,


Gambar 192 1ab|e1rans|t|on[ava

Gambar 193 1ab|e1rans|t|on saat memu|a| trans|s|
Anda blsa mellhaL efek Lranslsl keLlka !1able dluruLkan
Dragging
Selaln Lranslsl salah saLu kegunaan darl Classpane adalah menampllkan dragglng khususnya gambar
aLau llle uan kall lnl klLa akan mengllhaL kegunaan Classpane dalam proses dragglng
Str|p8andunk http]]str|pbandunkcom]
266

"|ka anda t|dak memaham| Drag and Drop d| Sw|ng anda b|sa be|a[ar dar| 1utor|a| ava yang ada
da|am CD"
FiW
Sekarang klLa akan membuaL glasspane unLuk proses drag flle
Classanellleurag[ava
package pelajaran14;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/
@author usu
/
public class GlassPaneFileDrag extends JPanel ,

private boolean dragFile;
private final Image image;
private Point location;

public GlassPaneFileDrag() ,
super();
setJpaque(false);
this.image = new ImageIcon(getClass()
.getResource("/pelajaran14/file.png")).getImage();
,

public boolean isDragFile() ,
return this.dragFile;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (isDragFile()) ,
if ((this.image != null) && (this.location != null)) ,
g.drawImage(this.image, this.location.x, this.location.y,
null);
,
,
,

public void setDragFile(final boolean dragFile, final Point location) ,
this.dragFile = dragFile;
SwingUtilities.convertPointFromScreen(location, this);
this.location = location;
repaint();
,
,

Str|p8andunk http]]str|pbandunkcom]
267

uan sekarang Llnggal klLa buaL !lrame yang memanfaaLkan glasspane dlaLas
ClassanellleuragApp[ava
package pelajaran14;

import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.io.IJException;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/
@author usu
/
public class GlassPaneFileDragApp extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new GlassPaneFileDragApp().setVisible(true);
,
,);
,

private final JTextArea area;

private final GlassPaneFileDrag glasspane;

public GlassPaneFileDragApp() ,
super();
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setSize(400, 300);

this.glasspane = new GlassPaneFileDrag();
setGlassPane(this.glasspane);
getGlassPane().setVisible(true);

this.area = new JTextArea();
add(new JScrollPane(this.area));

new DropTarget(this.area, new DropTargetListener() ,

public void dragEnter(final DropTargetDragEvent dtde) ,
dragJver(dtde);
Str|p8andunk http]]str|pbandunkcom]
268

,

public void dragExit(final DropTargetEvent dte) ,
final Point p = getMousePosition();
SwingUtilities.convertPointToScreen(p,
GlassPaneFileDragApp.this);
GlassPaneFileDragApp.this.glasspane.setDragFile(false, p);
,

public void dragJver(final DropTargetDragEvent dtde) ,
if (dtde.isDataFlavorSupported(DataFlavor.avaFileListFlavor))
,
final Point p = getMousePosition();
SwingUtilities
.convertPointToScreen(p, GlassPaneFileDragApp.this);
GlassPaneFileDragApp.this.glasspane.setDragFile(true, p);
,
,

public void drop(final DropTargetDropEvent dtde) ,
dtde.acceptDrop(DnDConstants.ACTION_COPY_O#_OVE);
final Transferable t = dtde.getTransferable();

for (final DataFlavor flavor : t.getTransferDataFlavors()) ,
if (flavor.isFlavorJavaFileListType()) ,
try ,
final List<File list = (List<File) t
.getTransferData(flavor);
for (final File f : list) ,
GlassPaneFileDragApp.this.area.append(f.getPath()
+ "\n");
,
, catch (final UnsupportedFlavorException ex) ,
// Error
, catch (final IJException ex) ,
// Error
,
,
,

dtde.dropComplete(true);
final Point p = getMousePosition();
SwingUtilities.convertPointToScreen(p,
GlassPaneFileDragApp.this);
GlassPaneFileDragApp.this.glasspane.setDragFile(false, p);
,

public void dropActionChanged(final DropTargetDragEvent dtde) ,
dragJver(dtde);
,
,);
,
,

uan sekarang anda akan mellhaL Lampllan apllkaslnya seperLl dlbawah lnl
Str|p8andunk http]]str|pbandunkcom]
269


Gambar 194 G|assaneI||eDragApp[ava
!lka anda mendrag flle darl explorer ke dalam program lnl maka akan glasspane akan
memperlhaLkan kalo ada flle yang sedang dldrag

Gambar 19S G|assaneI||eDragApp saat g|asspane menamp||kan gambar saat f||e d|drag
dan [lka dldrop maka akan LerllhaL hasllnya
Str|p8andunk http]]str|pbandunkcom]
270


Gambar 196 G|assaneI||eDragApp saat f||e drag d|drop
ImagW
1adl klLa sudah membuaL glasspane yang berguna menampllkan flle yang dldrag nah sekarang klLa
akan membuaL glasspane yang dapaL menampllkan gambar yang sedang dldrag uan unLuk
membuaLnya klLa modlflkasl source code Classanellleurag[ava
Classanelmageurag[ava
package pelajaran14;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/
@author usu
/
public class GlassPaneImageDrag extends JPanel ,

private boolean dragFile;
private boolean fileImage;
private Image gambar;
private final Image image;
private Point location;

public GlassPaneImageDrag() ,
super();
setJpaque(false);
this.image = new ImageIcon(getClass()
.getResource("/pelajaran14/file.png")).getImage();
,

public boolean isDragFile() ,
Str|p8andunk http]]str|pbandunkcom]
271

return this.dragFile;
,

public boolean isFileImage() ,
return this.fileImage;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (isDragFile()) ,
if ((this.image != null) && (this.location != null)) ,
if (isFileImage()) ,
g.drawImage(this.gambar, this.location.x, this.location.y,
100, 100, null);
, else ,
g.drawImage(this.image, this.location.x, this.location.y,
null);
,
,
,
,

public void setDragFile(final File file, final boolean dragFile,
final Point location) ,

if (file.getName().toUpperCase().endsWith(".JPG")) ,
this.gambar = new ImageIcon(file.getPath()).getImage();
setFileImage(true);
, else ,
setFileImage(false);
,

this.dragFile = dragFile;
SwingUtilities.convertPointFromScreen(location, this);
this.location = location;
repaint();
,

public void setFileImage(final boolean fileImage) ,
this.fileImage = fileImage;
,
,

Sekarang klLa buaL !lramenya
ClassanelmageuragApp[ava
package pelajaran14;

import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
Str|p8andunk http]]str|pbandunkcom]
272

import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.io.IJException;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/
@author usu
/
public class GlassPaneImageDragApp extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new GlassPaneImageDragApp().setVisible(true);
,
,);
,

private final JTextArea area;

private final GlassPaneImageDrag glasspane;

public GlassPaneImageDragApp() ,
super();
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setSize(400, 300);

this.glasspane = new GlassPaneImageDrag();
setGlassPane(this.glasspane);
getGlassPane().setVisible(true);

this.area = new JTextArea();
add(new JScrollPane(this.area));

new DropTarget(this.area, new DropTargetListener() ,

private File file;
private boolean in = false;

public void dragEnter(final DropTargetDragEvent dtde) ,
dragJver(dtde);
,

public void dragExit(final DropTargetEvent dte) ,
final Point p = getMousePosition();
SwingUtilities.convertPointToScreen(p,
GlassPaneImageDragApp.this);
GlassPaneImageDragApp.this.glasspane.setDragFile(new File(""),
false, p);
this.in = false;
,

Str|p8andunk http]]str|pbandunkcom]
273

public void dragJver(final DropTargetDragEvent dtde) ,
if (dtde.isDataFlavorSupported(DataFlavor.avaFileListFlavor))
,
final Point p = getMousePosition();
SwingUtilities.convertPointToScreen(p,
GlassPaneImageDragApp.this);
if (!this.in) ,
dtde.acceptDrag(DnDConstants.ACTION_COPY_O#_OVE);
final Transferable t = dtde.getTransferable();
for (final DataFlavor flavor :
t.getTransferDataFlavors()) ,
if (flavor.isFlavorJavaFileListType()) ,
try ,
final List<File list = (List<File) t
.getTransferData(flavor);
if (this.file != null) ,
if (!this.file.equals(list.get(0))) ,
this.file = list.get(0);
,
, else ,
this.file = list.get(0);
,
, catch (final UnsupportedFlavorException ex) ,
// Error
, catch (final IJException ex) ,
// Error
,
,
,
,
this.in = true;
GlassPaneImageDragApp.this.glasspane.setDragFile(this.file,
true, p);
, else ,
dtde.rejectDrag();
,
,

public void drop(final DropTargetDropEvent dtde) ,
dtde.acceptDrop(DnDConstants.ACTION_COPY_O#_OVE);
final Transferable t = dtde.getTransferable();

for (final DataFlavor flavor : t.getTransferDataFlavors()) ,
if (flavor.isFlavorJavaFileListType()) ,
try ,
final List<File list = (List<File) t
.getTransferData(flavor);
for (final File f : list) ,
GlassPaneImageDragApp.this.area.append(f.getPath()
+ "\n");
,
, catch (final UnsupportedFlavorException ex) ,
// Error
, catch (final IJException ex) ,
// Error
,
,
,
final Point p = getMousePosition();
SwingUtilities.convertPointToScreen(p,
GlassPaneImageDragApp.this);
Str|p8andunk http]]str|pbandunkcom]
274

GlassPaneImageDragApp.this.glasspane.setDragFile(new File(""),
false, p);
this.in = false;
dtde.dropComplete(true);
,

public void dropActionChanged(final DropTargetDragEvent dtde) ,
dragJver(dtde);
,
,);
,
,

1ampllan !lrame

Gambar 197 G|assaneImageDragApp[ava
SaaL ada flla gambar ([pg) yang dl drag dlaLas Classane
Str|p8andunk http]]str|pbandunkcom]
273


Gambar 198 G|assaneImageDragApp saat user mendrag f||e gambar
SaaL ada flle yang bukan gambar ([pg) dl drag dlaLas glasspane

Gambar 199 G|assaneImageDragApp saat user mendrag f||e se|a|n gambar
ContainWr
Salah saLu kemampuan yang laln darl Classane adalah blsa dlgunakan sebagal ConLalner karena
seLlap membuaL glasspane saya selalu menggunakan class yang dlLurunkan darl !anel maka
oLomaLls slfaL !anel ada dalam Classane mlsalnya dapaL dlgunakan sebagal conLalner unLuk
komponenL laln
Sbow MWssagW
8lasanya anda menggunakan !CpLlonane unLuk menampllkan pesan Lapl sekarang klLa akan
membuaL Lampllan pesan dlaLas glasspane
Str|p8andunk http]]str|pbandunkcom]
276

ClassaneMessage[ava
package pelajaran14;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

/
@author usu
/
public class GlassPaneMessage extends JPanel ,

private final JLabel label;
private final JPanel panel;
private boolean showMessage;
private final JButton tombol;

public GlassPaneMessage() ,
super();
setJpaque(false);

this.panel = new JPanel();
this.panel.setLayout(new BorderLayout(20, 20));
this.panel.setPreferredSize(new Dimension(200, 100));
this.panel.setBorder(new LineBorder(Color.LACK, 3));

this.tombol = new JButton("CLJSE");
this.tombol.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
setShowMessage(false);
,
,);

final JPanel temp = new JPanel(new FlowLayout());
temp.setJpaque(false);
temp.add(this.tombol);
this.panel.add(temp, BorderLayout.SOUTH);

this.label = new JLabel();
this.label.setHorizontalAlignment(SwingConstants.CENTE#);
this.label.setJpaque(false);
this.panel.add(this.label);

setLayout(new FlowLayout());
add(this.panel);

addMouseListener(new MouseAdapter() ,
Str|p8andunk http]]str|pbandunkcom]
277

,);
addKeyListener(new KeyAdapter() ,
,);
,

public boolean isShowMessage() ,
return this.showMessage;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (isShowMessage()) ,
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(1F, 0F, 0F, 0.5F));
g2.fillRect(0, 0, getWidth(), getHeight());
,
,

public void setMessage(final String message) ,
this.label.setText(message);
,

public void setShowMessage(final boolean showMessage) ,
this.showMessage = showMessage;
repaint();
setVisible(showMessage);
,

@Jverride
public void setVisible(final boolean aFlag) ,
if (isShowMessage()) ,
super.setVisible(aFlag);
, else ,
super.setVisible(false);
,
,
,

ConLoh penggunaan ClassaneMessage
ClassaneMessageApp[ava
Str|p8andunk http]]str|pbandunkcom]
278


Gambar 200 G|assaneMessageApp[ava
keLlka anda mengkllk Lombol SPCW MLSSACL maka glasspane akan menampllkan pesan yang anda
Lullskan dl 1exLlleld
Str|p8andunk http]]str|pbandunkcom]
279


Gambar 201 G|assaneMessageApp saat menamp||kan pesan
unLuk menggunakan menseL Lampllan Leks dl ClassaneMessage anda gunakan meLode
q/ossponesetMessoqe{5trinq teks)

uan unLuk menampllkan pesan gunakan
q/ossponeset5howMessoqe{true)

uan unLuk menghllangkan pesan gunakan
q/ossponeset5howMessoqe{fo/se)

CassDiaog
1adl klLa membuaL glasspane yang berguna sebagal conLalner namun hanya dapaL menampllkan
pesan oleh karena lLu kall lnl klLa akan membuaL glasspane yang dapaL menampllkan panel yang
sesual dengan yang user lnpuLkan
Classaneanel[ava
package pelajaran14;

import java.awt.AlphaComposite;
import java.awt.Color;
Str|p8andunk http]]str|pbandunkcom]
280

import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;

/
@author usu
/
public class GlassPanePanel extends JPanel ,

public GlassPanePanel() ,
super();
setLayout(null);
setJpaque(false);
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final GradientPaint paint = new GradientPaint(0, 0, Color.G#EEN,
getWidth(), getHeight(), Color.YELLOW);

final Graphics2D g2 = (Graphics2D) g.create();
g2.setComposite(AlphaComposite.SrcOver.derive(0.5F));
g2.setPaint(paint);
g2.fillRect(0, 0, getWidth(), getHeight());
,

public void showPanel(final JPanel panel, final Dimension size) ,
removeAll();
add(panel);
panel.setBounds(100, 100, size.width, size.height);
,
,

ClassaneanelApp[ava
Str|p8andunk http]]str|pbandunkcom]
281


Gambar 202 G|assaneane|App[ava

Gambar 203 G|assaneane|App saat menamp||kan pane|
Str|p8andunk http]]str|pbandunkcom]
282


Gambar 204 G|assaneane|App[ava
rogrWssBar
Selaln menampllkan pesan salah saLu kemampuan Classane sebagal conLalner adalah
menampllkan progressbar Mlsal darl pada menampllkan progressbar dl dlalog mungkln menuruL
saya leblh balk menampllkan progressbar dl Classane

package pelajaran14;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

/
@author usu
/
public class GlassPaneProgress extends JPanel ,

private final JProgressBar progress;
private boolean showProgress;

public GlassPaneProgress() ,
super();
this.progress = new JProgressBar();
this.progress.setPreferredSize(new Dimension(200, this.progress
Str|p8andunk http]]str|pbandunkcom]
283

.getPreferredSize().height));

setLayout(new FlowLayout());
setJpaque(false);
add(this.progress);

addMouseListener(new MouseAdapter() ,
,);
addKeyListener(new KeyAdapter() ,
,);
,

public int getMaximum() ,
return this.progress.getMaximum();
,

public int getMinimum() ,
return this.progress.getMinimum();
,

public boolean isIndeterminate() ,
return this.progress.isIndeterminate();
,

public boolean isShowProgress() ,
return this.showProgress;
,

public boolean isStringPainted() ,
return this.progress.isStringPainted();
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

if (isShowProgress()) ,
final Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(1F, 0F, 0F, 0.5F));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
,
,

public void setIndeterminate(final boolean newValue) ,
this.progress.setIndeterminate(newValue);
,

public void setMaximum(final int n) ,
this.progress.setMaximum(n);
,

public void setMinimum(final int n) ,
this.progress.setMinimum(n);
,

public void setShowProgress(final boolean showProgress) ,
this.showProgress = showProgress;
setVisible(showProgress);
,

Str|p8andunk http]]str|pbandunkcom]
284

public void setString(final String s) ,
this.progress.setString(s);
,

public void setStringPainted(final boolean b) ,
this.progress.setStringPainted(b);
,

public void setValue(final int n) ,
this.progress.setValue(n);
,
,

ConLoh penggunaan Classanerogress
ClassanerogressApp[ava

Gambar 20S G|assanerogressApp[ava
!lka anda mengkllk Lombol S1A81 LCnC 1ASk maka glasspane akan memulal menampllkan
progressbar
Str|p8andunk http]]str|pbandunkcom]
283


Gambar 206 G|assanerogressApp saat proses progress ber[a|an
MeLode dalam Classanerogress kebanyakan mendelegaLe meLode mlllk !progress8ar [adl
menggunakan Classanerogress layaknya menggunakan !rogress8ar unLuk menampllkan
glasspane gunakan
q/ossponeset5howProqress{true)

uan unLuk menghllangkan glasspane gunakan
q/ossponeset5howProqress{fo/se)

rogrWssBar
1adl klLa membuaL Classane rogress8ar menggunakan banLuan !rogress8ar nah sekarang klLa
buaL yang murkl klLa buaL sendlrl Lampa banLuan komponen laln
Classanerogress2[ava
package pelajaran14;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
Str|p8andunk http]]str|pbandunkcom]
286


/
@author usu
/
public class GlassPaneProgress2 extends JPanel ,

private final int max = 100;
private final int min = 0;
private int value;

public GlassPaneProgress2() ,
super();
setJpaque(false);
addMouseListener(new MouseAdapter() ,
,);
addKeyListener(new KeyAdapter() ,
,);
,

public int getMax() ,
return this.max;
,

public int getMin() ,
return this.min;
,

public int getValue() ,
return this.value;
,

@Jverride
protected void paintComponent(final Graphics g) ,
super.paintComponent(g);

final Dimension dim = getSize();
final int x = (dim.width - getMax()) / 2;
final int y = (dim.height - 10) / 2;

Rectangle2D.Double kotak = new Rectangle2D.Double(x, y, getValue(),
10);
final GradientPaint paint = new GradientPaint(x, y, Color.LACK, x,
y + 10, Color.#ED);

final Graphics2D g2 = (Graphics2D) g.create();

g2.setColor(new Color(1F, 0F, 0F, 0.5F));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setPaint(paint);
g2.fill(kotak);

kotak = new Rectangle2D.Double(x, y, getMax(), 10);
g2.setColor(Color.-lack);
g2.draw(kotak);
g2.dispose();
,

public void setValue(final int value) throws IllegalArgumentException ,
if (value < 0) ,
throw new IllegalArgumentException();
,
Str|p8andunk http]]str|pbandunkcom]
287

this.value = value;
repaint();
,
,

Classanerogress2App[ava

Gambar 207 G|assanerogress2App[ava

Gambar 208 G|assanerogress2App saat progress ber[a|an
KWsimpuan
Wah lnl dla baglan yang pallng saya bencl MLn?lMuLkAn" ?ang pasLl Classane adalah
kea[alban yang dlmlllkl oleh Swlng yang belum LenLu dlmlllkl oleh bahasa pemrograman vlsual laln

Str|p8andunk http]]str|pbandunkcom]
288

Wa|aran
LayWrWdanW
!Layeredane merupakan salah saLu baglan !lrame [uga seperLl Classane namun leLaknya berada
dl bawah Classane dan ConLenLane !lka anda pernah menggunakan Adobe hoLoshop mungkln
anda mengerLl apa lLu Layer nah seperLl lLulah kegunaan layer menampllkan komponenL secara
berLumpuk

Gambar 209 os|s| Layeredane da|am Irame
1apl saya sarankan unLuk Lldak memanlpulasl !Layeredane mlllk !lrame karena uruLannya sudah
dlaLur sedemlklan rupa agar Lampllan !lrame ber[alan dengan balk Anda perlu keLahul [lka anda
membuaL !Layeredane maka anda harus menenLukan lokasl dan ukuran komponenL yang
dlLempaLkan dalam !Layeredane secara manual karena !Layeredane memlllkl layouL null
8erbeda dengan ConLalner yang laln unLuk menambahkan komponen ke !Layeredane gunakan
lLoyeredPoneodd{component komp lnteqer index)

Semakln Llnggl lndex maka ComponenL akan berada dl poslsl leblh aLas
SampleLayer[ava
package pelajaran15;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/
@author usu
/
public class SampleLayer extends JFrame ,

Str|p8andunk http]]str|pbandunkcom]
289

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new SampleLayer().setVisible(true);
,
,);
,

private final JLayeredPane pane;
private final JPanel panel;

private final JPanel panel2;

public SampleLayer() ,
super();
setSize(400, 400);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);

this.pane = new JLayeredPane();
this.panel = new JPanel();
this.panel2 = new JPanel();

this.pane.add(this.panel, new Integer(1));
this.pane.add(this.panel2, new Integer(2));

this.panel.setBounds(100, 100, 200, 200);
this.panel.setBackground(Color.#ED);
this.panel2.setBounds(50, 50, 200, 200);
this.panel2.setBackground(Color.LUE);

setLayout(new BorderLayout());
add(this.pane);
,
,

Str|p8andunk http]]str|pbandunkcom]
290


Gambar 210 Samp|eLayer[ava
Salah saLu kemampuan !Layeredane adalah dapaL merubah lokasl lndex komponenL yang berada
dlaLasnya
// meruboh /okosi index
lLoyeredPonesetLoyer{component comp int index)

// menempotkon komponen ke uruton po/inq otos
lLoyeredPone move1olront{component comp)

// menempotkon komponen ke uruton po/inq bowoh
lLoyeredPone move1o8ock{component comp)

Layerupuown[ava
package pelajaran15;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/
Str|p8andunk http]]str|pbandunkcom]
291

@author usu
/
public class LayerUpDown extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new

Runnable() ,

public void run() ,
new LayerUpDown().setVisible(true);
,
,);
,

private final JLayeredPane pane;
private final JPanel panel;

private final JPanel panel2;

public LayerUpDown() ,
super();
setSize(400, 400);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);

this.pane = new JLayeredPane();
this.panel = new JPanel();
this.panel2 = new JPanel();

this.pane.add(this.panel);
this.pane.add(this.panel2);

this.panel.setBounds(100, 100, 200, 200);
this.panel.setBackground(Color.#ED);
this.panel2.setBounds(50, 50, 200, 200);
this.panel2.setBackground(Color.LUE);

this.panel.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseClicked(final MouseEvent e) ,
LayerUpDown.this.pane.moveToFront(LayerUpDown.this.panel);
,
,);

this.panel2.addMouseListener(new MouseAdapter() ,

@Jverride
public void mouseClicked(final MouseEvent e) ,
LayerUpDown.this.pane.moveToFront(LayerUpDown.this.panel2);
,
,);

setLayout(new BorderLayout());
add(this.pane);
,
,

Str|p8andunk http]]str|pbandunkcom]
292


Gambar 211 LayerUpDown saat pane| merah d|atas
keLlka panel blru dlkllk maka panel blru akan plndah layer ke uruLan pallng aLas

Gambar 212 LayerUpDown saat pane| b|ru d|atas
Str|p8andunk http]]str|pbandunkcom]
293

CassanW
!lka klLa menggunakan Classane dan klLa lngln membuaL beberapa efek mlsal Classane 1ranslsl
Classane urag dan Classane rogress lLu men[adl kendala karena susah unLuk membuaL
beberapa Classane dalam !lrame nah oleh karena lLu dengan adanya !Layeredane hal lLu blsa
dlaLasl
Mlsal klLa buaL Classane rogress dan Classane Message dalam saLu !lrame
LayerClassane[ava
package pelajaran15;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import pelajaran14.GlassPaneMessage;
import pelajaran14.GlassPaneProgress;

/
@author usu
/
public class LayerGlassPane extends JFrame ,

public static void main(final String, usu) ,
SwingUtilities.invokeLater(new Runnable() ,

public void run() ,
new LayerGlassPane().setVisible(true);
,
,);
,

private final GlassPaneMessage glasspaneMessage;
private final GlassPaneProgress glasspaneProgress;
private final JLayeredPane layer;
private final JPanel panelUtama;
private final JButton tombolMessage;

private final JButton tombolProgress;

public LayerGlassPane() ,
super();

this.layer = new JLayeredPane();
this.glasspaneMessage = new GlassPaneMessage();
this.glasspaneProgress = new GlassPaneProgress();
this.tombolMessage = new JButton("SAY HELLJ");
this.tombolProgress = new JButton("START PRJGRESS");
this.panelUtama = new JPanel(new FlowLayout(FlowLayout.CENTE#, 10,
Str|p8andunk http]]str|pbandunkcom]
294

10));

this.panelUtama.add(this.tombolMessage);
this.panelUtama.add(this.tombolProgress);

this.layer.add(this.glasspaneMessage, JLayeredPane.D#AG_LAYE#);
this.layer.add(this.glasspaneProgress,JLayeredPane.D#AG_LAYE#);
this.layer.add(this.panelUtama);

this.glasspaneMessage.setVisible(false);
this.glasspaneProgress.setVisible(false);

setLayout(new BorderLayout());
add(this.layer);
setDefaultCloseJperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400, 400);
setResizable(false);

addComponentListener(new ComponentAdapter() ,

@Jverride
public void componentResized(final ComponentEvent e) ,
LayerGlassPane.this.glasspaneMessage.setBounds(0, 0,
LayerGlassPane.this.layer.getWidth(),
LayerGlassPane.this.layer.getHeight());
LayerGlassPane.this.glasspaneProgress.setBounds(0, 0,
LayerGlassPane.this.layer.getWidth(),
LayerGlassPane.this.layer.getHeight());
LayerGlassPane.this.panelUtama.setBounds(0, 0,
LayerGlassPane.this.layer.getWidth(),
LayerGlassPane.this.layer.getHeight());
,
,);

this.tombolMessage.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
LayerGlassPane.this.glasspaneMessage.setMessage("HELLJ");
LayerGlassPane.this.glasspaneMessage.setShowMessage(true);
,
,);

this.tombolProgress.addActionListener(new ActionListener() ,

public void actionPerformed(final ActionEvent e) ,
new Thread(new Runnable() ,

public void run() ,
LayerGlassPane.this.glasspaneProgress.setMinimum(0);
LayerGlassPane.this.glasspaneProgress.setMaximum(5000);

LayerGlassPane.this.glasspaneProgress.setStringPainted(true);

LayerGlassPane.this.glasspaneProgress.setShowProgress(true);
for (int i = 1; i <= 5000; i++) ,
try ,
LayerGlassPane.this.glasspaneProgress.setValue(i);

LayerGlassPane.this.glasspaneProgress.setString("DJNE "
+ i + " JF 5000 TASK");
LayerGlassPane.this.glasspaneProgress.repaint();
Str|p8andunk http]]str|pbandunkcom]
293

Thread.sleep(1);
, catch (final InterruptedException ex) ,
// ERRJR
,
,

LayerGlassPane.this.glasspaneProgress.setShowProgress(false);
,
,).start();
,
,);
,
,


Gambar 213 LayerG|assane[ava
keLlka anda Lekan Lombol SA? PLLLC

Gambar 214 LayerG|assane saat menamp||kan pesan
keLlka anda Lekan Lombol S1A81 8CC8LSS
Str|p8andunk http]]str|pbandunkcom]
296


Gambar 21S LayerG|assane saat menamp||kan progress
KWsimpuan
Mungkln yang saya Lon[olkan darl !Layeredane adalah Classane Maksudnya [lka anda akan
menggunakan banyak Classane leblh balk gunakan !Layeredane uan [angan lupa unLuk
Classane gunakan
lLoyeredPoneodd{component q/osspone lLoyeredPoneuk46_L4Yk)


Str|p8andunk http]]str|pbandunkcom]
297

SampW Swing MakW bWr
Semua conLoh conLoh pada gambar dlbawah lnl dapaL anda llhaL source codenya dl pro[ecL
SwlngMakeCver dalam pakeL sample"
lormLogln[ava

Gambar 216 IormLogIn[ava
lormldenLlLas[ava
Str|p8andunk http]]str|pbandunkcom]
298


Gambar 217 IormIdent|tas[ava
noLead[ava
Str|p8andunk http]]str|pbandunkcom]
299


Gambar 218 Notead[ava
lonL8rowser[ava
Str|p8andunk http]]str|pbandunkcom]
300


Gambar 219 Iont8rowser[ava
1ableMahaslswa[ava

Gambar 220 1ab|eMahas|swa[ava

Str|p8andunk http]]str|pbandunkcom]
301

Lampiran
Instaasi
-Zip
Apllkasl lnl akan klLa gunakan unLuk mengeksLrak seluruh flle Zlp yang ada dalam Cu kenapa saya
an[urkan menggunakan 7Zlp dlbandlngkan apllkasl lalnnya? Pal perLama karena serlng sekall Ler[adl
error keLlka mengeksLrak flle Zlp [lka anda menggunakan Wlndow Zlp dan Wln8ar Alasannya karena
mereka Lak mendukung formaL nama flle yang meleblhl darl 233 karekLer Sehlnga [lka anda akan
mengeksLrak flle yang memlllkl nama flle yang leblh darl 233 karekLer maka akan Ler[adl error

Gambar 221 Choose Insta|| Locat|on
Cmbar dlaLas adalah Lampllan awal proses lnsLalasl 7Zlp Anda blsa menenLukan dlrekLorl unLuk
lnsLalasl 7Zlp dengan mengkllk Lombol 8rowse !lka selesal menenLukan lokasl kllk lnsLall
Str|p8andunk http]]str|pbandunkcom]
302


Gambar 222 Insta|||ng
1unggu sampal proses lnsLalasl selesal uan seLelah selesal anda akan mellhaL Lampllan seperLl
gambar dlbawah

Gambar 223 Comp|ete Setup
Str|p8andunk http]]str|pbandunkcom]
303

DK .
Sebelum anda membuaL program berbasls [ava pasLllah harus LerlnsLal !uk dalam kompuLer anda
dan oleh karena lLu sebelum menglnsLal neL8eans dan Lcllpse klLa akan menglnsLal !uk Lerleblh
dahulu

Gambar 224 L|cense Agreement
Cambar dlaLas adalah Lampllan awal proses lnsLalasl !uk kllk AccepL unLuk melan[uLkan proses
lnsLalasl
Str|p8andunk http]]str|pbandunkcom]
304


Gambar 22S Custom Setup
1enLukan lokasl lnsLalasl !uk sesual dengan yang anda lnglnkan

Gambar 226 Insta|||ng
Str|p8andunk http]]str|pbandunkcom]
303

Cambar dlaLas menampllkan proses lnsLalasl yang sedang ber[alandan seLelah selesal menglnsLal !uk
maka oLomaLls akan LerlnsLal pula !8L sehlngga muncul koLak dlalog seperLl dlbawah

Gambar 227 Custom Setup
1enLukan lokasl !8L sesual dengan yang anda lnglnkan lalu kllk nexL
Str|p8andunk http]]str|pbandunkcom]
306


Gambar 228 Insta|||ng ava
1unggu sampal !8L selesal LerlnsLal SeLelah selesal maka akan LerllhaL dlalog seperLl dlbawah lnl

Gambar 229 W|zard Comp|eted
Str|p8andunk http]]str|pbandunkcom]
307

aba DoU
!avauoc merupakan kumpulan dokumenLasl [ava balk lLu penggunaan [ava sampal penggunaan Al
[ava uan unLuk menglnsLalnya anda cukup mengeksLraknya ke dlrekLorl LempaL LerlnsLalnya !uk

Gambar 230 Lkstrak avaDoc
LksLrak flle !ava uocsZlp menggunakan 7Zlp dengan mengkllk kanan flle !ava uocsZlp lalu pullh 7
Zlp LksLrak llle

Gambar 231 Lxtrak I||e
ubah lokasl LargeL dlrekLorl eksLrak ke dlrekLorl LempaL LerlnsLalnya !uk
Str|p8andunk http]]str|pbandunkcom]
308


Gambar 232 Lkstrak I||e
Lalu kllk Ck unLuk mengeksLrak flle uan Lunggu sampal 7Zlp mengeksLrak semua [ava doc

Gambar 233 roses Lkstrak
NWtBWans .
neL8eans merupakan luL [ava yang memlllkl dukungan penuh darl Sun MlcrosysLem Selaln lLu
neL8eans dlbuaL menggunakan Swlng sehlngga neL8eans blsa dlbllang luL yang pallng kompeLebel
dengan Swlng
Str|p8andunk http]]str|pbandunkcom]
309


Gambar 234 Net8eans Insta||er
Cambar dlaLas merupakan Lampllan awal proses lnsLalasl neL8eans kllk nexL unLuk melan[uLkan
Str|p8andunk http]]str|pbandunkcom]
310


Gambar 23S L|cense Agreement
Ceklls l accepL Lhe Lerms ln Lhe llcense agreemenL" lalu kllk neLxL
Str|p8andunk http]]str|pbandunkcom]
311


Gambar 236 Net8eans IDL Insta||at|on
1enLukan dlrekLorl unLuk lnsLalasl neL8eans dan LenLukan dlrekLorl LempaL LerlnsLalnya !uk [lka
sudah kllk neLx
Str|p8andunk http]]str|pbandunkcom]
312


Gambar 237 Summary
kllk lnsLall unLuk menglnsLal neL8eans uan seLelah proses lnsLalasl berhasll maka anda akan mellhaL
shorLcur neL8eans dl ueksLop
EUipsW .
8erbeda dengan neL8eans Lcllpse merupakan luL yang mendapaL dukungan penuh darl l8M Selaln
lLu Lcllpse Lldak dlbangun menggunakan Swlng LeLapl SW1 (sebuah llbrary Cul yang dlkembangkan
oleh l8M) Lcllpse merupakan program yang Lak perlu memerllkan proses lnsLalasl sehlngga unLuk
menglnsLal Lcllpse klLa hanya perlu mengeksLraknya

Gambar 238 Lkstrak Lc||pse ava
Str|p8andunk http]]str|pbandunkcom]
313

unLuk menglnsLal Lcllpse eksLrak gunakan 7Zlp dengan cara mengkllk kanan flle Lcllpse !avaZlp lalu
kllk menu 7Zlp LksLrak flle

Gambar 239 Lkstrak I||e
LksLrak flle LersebuL sesual dengan dlrekLorl yang anda lnglnkan !lka selesal kllk Ck unLuk memulal
proses eksLrak

Gambar 240 roses Lkstrak
1unggu hlngga proses eksLrak selesal uan [lka selesal bukalah dlrekLorl LempaL anda mengeksLrak
lalu carl flle ecllpseexe dan unLuk men[alankan apllkasl Lcllpse anda cukup membuka flle ecllpseexe
Str|p8andunk http]]str|pbandunkcom]
314


Gambar 241 I||e Lc||pseLkL

Str|p8andunk http]]str|pbandunkcom]
313

TWntang Wnuis
enulls bernama Lko kurn|awan khannedy Skom Lahlr dl koLa
Subang Langgal 29 uesember 1988 dan besar dl koLa Subang
enulls merupakan lulusan unlverslLas kompuLer lndonesla
SaaL lnl penulls men[abaL sebagal Ch|ef Lxecut|ve Cff|cer dl
Str|p8andunk yalLu perusahaan yang bergerak dl pengembangan
Leknologl lnformasl dan komunlkasl
enulls akLlf dl berbagal komunlLas Leknologl dan saaL lnl penulls
adalah Leader dl komunlLas ava User Group 8andung dan [uga
Moderator dl komunlLas Net8eans Indones|a


enulls dapaL dlhubungl dl
O echokhannedy[gmallcom
O hLLp//LwlLLercom/khannedy
O hLLp//facebookcom/khannedy
u

You might also like