Anda di halaman 1dari 39

Bab XII - Pengenalan GUI dengan Eclipse SWT

SWT adalah GUI berbagai platform yang dikembangkan oleh IBM. Kenapa IBM membuat sistem GUI
lain dan tidak menggunakan rangka kerja GUI yang sudah ada pada a!a" Untuk menja#ab pertanyaan
ini$ kita perlu melihat kilas balik tentang a!a di a#al perkembangannya.
Sun telah membuat rangka kerja GUI yang dinamakan %WT &%bstra't Windo#ing Toolkit(. )angka
kerja %WT menggunakan #idget &komponen pada GUI$ seperti tombol$ menu$ teks$ dll( alami yang
merupakan ba#aan dari setiap sistem operasi. %kan tetapi #idget tersebut memiliki masalah pada
*+,. Masalah *+, ini mengakibatkan hilangnya beberapa fitur pada sistem operasi lain. %tau dengan
kata lain$ jika platform % memiliki #idget - . /0 dan platform B memiliki #idget 10 . 12$ maka rangka
kerja %WT hanya bisa digunakan untuk sebagian #idget yang beririsan saja.
Untuk meme'ahkan masalah ini$ Sun membuat rangka kerja baru yang merupakan emulasi #idget$
bukan menggunakan #idget ba#aan platform. 3al ini meme'ahkan masalah *+, dan memberikan
rangka kerja yang kaya #idget$ akan tetapi masalah lain mun'ul. Misalnya$ aplikasi S#ing tidak lagi
mirip seperti aplikasi lain pada platform di mana ia dijalankan.
,engan adanya perbaikan pada 4M$ aplikasi S#ing tetap saja mengalami masalah kinerja karena
sifatnya yang berupa emulasi. 3al ini tidak ditemukan pada #idget ba#aan platform karena #idget ini
lebih dekat dengan sistem operasi. *ebih jauh$ aplikasi S#ing menghabiskan lebih banyak memori
yang tidak bisa digunakan untuk piranti ke'il seperti 5,% dan telepon genggam.
IBM memutuskan bah#a pendekatan tersebut tidak memenuhi kebutuhannya. %khirnya$ IBM membuat
pustaka GUI baru yang disebut SWT$ yang meme'ahkan masalah yang terdapat pada rangka kerja
%WT dan S#ing. )angka kerja SWT langsung mengakses #idget ba#aan sistem operasi melalui 6I.
ika #idget tersebut tidak tersedia$ maka SWT akan mengemulasi #idget yang hilang itu.
Blok Penyusun Suatu Aplikasi SWT
,isplay$ Shell dan kumpulan Widget adalah blok penyusun aplikasi SWT. ,isplay bertugas untuk
mengatur perulangan e!ent &dari keyboard atau mouse( dan mengatur komunikasi antara thread UI dan
thread lainnya. Shell adalah jendela di mana aplikasi berjalan. Setiap aplikasi SWT memiliki paling
tidak satu ,isplay dan satu atau lebih instansi Shell.
Gambar di atas mengilustrasikan aplikasi SWT dari sudut pandang yang berbeda. ,iagram pertama di
sebelah kiri adalah diagram kelas.kelas turunan dari objek.objek UI. ,iagram tengah adalah bagaimana
objek UI diletakkan$ dan gambar kanan adalah UI yang dihasilkan.
ika suatu aplikasi menggunakan beberapa thread$ setiap thread akan memiliki instansi objek ,isplay
masing.masing. Kita bisa mengambil instansi suatu objek ,isplay dengan menggunakan metode statik
Display.getCurrent().
Suatu Shell melambangkan jendela suatu aplikasi. Shell bisa ditampilkan dalam ukuran seluruh layar$
ukuran biasa$ atau dike'ilkan hingga tak terlihat. %da dua jenis shell yang tersedia. 7ang pertama
adalah shell dengan tingkat paling tinggi$ yaitu yang dibuat langsung sebagai anak dari jendela utama
,isplay. enis kedua adalah shell dialog yang bergantung pada shell.shell lainnya.
enis suatu Shell bergantung pada bit gaya &style bit( yang diberikan pada konstruktornya. 6ilai
a#alnya adalah DialogShell. %rtinya$ jika tidak ada parameter yang diberikan pada konstruktornya$
maka shell yang dibuat akan bertipe DialogShell. ika parameter konstruktornya berupa objek bertipe
Display$ maka ia akan menjadi shell tingkat atas.
Beberapa sifat #idget harus ditentukan pada saat #idget tersebut dibuat. Sifat #idget tersebut disebut
bit gaya &style bit(. Bit gaya ini adalah konstanta yang didefinisikan dalam kelas SWT. Misalnya$
Button tombol = new Button(shell, bitGaya)
Kita bisa menggunakan lebih dari satu gaya dengan menggunakan operator 8) atau |. Misalnya$ kita
ingin membuat tombol yang bisa ditekan dan memiliki garis tepi$ kita bisa menggunakan SWT.PS! |
SWT.B"#D$# sebagai parameter bit gayanya.
Memulai SWT
Untuk memulai pemrograman dengan SWT$ mari kita buat program sederhana yang kita namakan
elloSWT.
%nda membutuhkan 9link9 ke pustaka SWT. %da dua 'ara untuk melakukannya :
-. Menggunakan pustaka SWT ba#aan dari ;'lipse. Untuk ini %nda tidak perlu mendo#nload
apa.apa. 5ustaka SWT ba#aan e'lipse terdapat pada direktori ;'lipse %nda$ misalnya pada
Windo#s &!"#eclipse#plugins#o$g%eclipse%s&t%&in'(%&in'(%)*+,'%-%.%/'--0c%1a$( atau pada
*inu< &eclise2plugins2o$g%eclipse%s&t%gtk%linu)%)*+,'%-%.%/'-3(b%1a$(
2. Menggunakan pustaka SWT beserta sumber kodenya untuk dokumentasi lebih lengkap. 5ustaka
SWT ini bisa diunduh pada alamat berikut : http:==###.e'lipse.org=s#t=. 5ilih )eleases .>
Stable .> &platform %nda$ misalnya Windos atau *inu<(. Setelah diunduh$ import ke dalam
;'lipse seperti %nda mengimport proyek.proyek pada #ebsite ini$ yaitu dengan 4ile .> Impo$t
.> Gene$al .> E)isting P$o1ects Into Wo$kspace .> Select A$c5ie/e 4ile .> &file ?ip SWT
hasil do#nload( .> 4inis5. *angkah ini hanya dilakukan satu kali saja.
Buat proyek baru dari ;'lipse$ 4ile .> 6e& .> 7a/a P$o1ect$ kemudian isi 5roje't 6ame
dengan elloSWT dan 'li'k 6e)t
Kita harus menambahkan pustaka SWT ke dalam proyek kita%
1. ika %nda menggunakan SWT ba#aan ;'lipse seperti di atas$ pilih halaman 8ib$a$ies. Klik
Add E)te$nal 7A9$ kemudian na!igasi ke direktori plugin di dalam instalasi ;'lipse %nda.
Misalnya di komputer saya$ direktori itu berada di !"#eclipse#plugins. 5ilih %) untuk SWT
pada direktori tersebut. 6amanya tergantung dari sistem operasi %nda$ misalnya pada Windo#s
file ini bernama org.e%lipse.s&t.&in'(.&in'(.)*+,'.-.../'--0%. Klik :; setelah file
ini ditambahkan di dalam folder *ibraries.
-. ika %nda mengunduh proyek SWT$ pilih halaman P$o1ects. Klik Add$ kemudian tambahkan
org.e'lipse.s#t. Kemudian klik 8K setelah proyek ini ditambahkan.
@older proyek baru akan dibuat$ seperti pada gambar berikut.
Kemudian klik kanan pada folder sr'$ dan pilih 6e& .> !lass. Isi nama kelas dengan
elloSWT$ nama pa'kage dengan 5ellos&t$ dan tik 9publi' stati' !oid main&StringAB args(9
untuk membuat metode main() se'ara otomatis.
Ketik kode berikut ini di dalam metode main()
Display 1isplay = new Display()2
Shell shell = new Shell(1isplay)2
shell.set3ayout( new #o&3ayout())2
3abel label = new 3abel(shell, SWT.4"4$)2
label.setTe)t(5!ello, Worl165)2
shell.pa%7()2
shell.open()2
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
1isplay.1ispose()2
label.1ispose()2
5erhatikan bah#a Display$ Shell$ #o&3ayout dan 3abel diberi tanda merah sebagai tanda
bah#a kesalahan program terjadi.
Sekarang pindahkan mouse %nda pada kesalahan pada kelas Display. ;'lipse akan memberi
tahu %nda kesalahan apa yang terjadi. 5ada 'ontoh ini$ kelas CDisplayC belum diketahui oleh
;'lipse. Klik pada pilihan Impo$t <=isplay< >o$g%eclipse%s&t%&idgets?. *ihat sekarang di a#al
program %nda ;'lipse menambahkan import org.e%lipse.s&t.&i1gets.Display2 se'ara
otomatis.
*akukan hal yang sama pada semua kesalahan$ yaitu Shell$ 3abel$ #o&3ayout dan SWT.4"4$$
sehingga tidak ada lagi kesalahan yang dilaporkan oleh ;'lipse.
Untuk menjalankan program %nda$ klik tombol 9un seperti pada gambar berikut.
Berikut ini adalah tampilan program SWT pertama %nda.
Mengkompilasi dan Membuat P$og$am SWT Be$1alan di 8ua$ Eclipse
Untuk bisa membuat program kita berguna untuk orang lain$ kita harus bisa mengkompilasi dan
membuat program tersebut sebagai satu 9paket9. 5roses ini disebut menyebarkan &deploy(. 5ada
;'lipse$ program yang telah kita buat bisa kita deploy dalam format %) &a!a %r'hi!e($ yang
menggabungkan semua file kelas yang sudah dikompilasi beserta pustaka yang dibutuhkan untuk bisa
menjalankan program tersebut.
Mari kita lihat 'ontoh program elloSWT yang sudah dibahas sebelumnya. Untuk men.deploy
program ini sehingga bisa dijalankan di luar ;'lipse$ lakukan langkah.langkah berikut :
;lik kanan pada nama proyek %nda$ kemudian pilih E)po$t. Setelah itu kotak dialog akan
terbuka. Kemudian pilih 9unnable 7A9 4ile dari dalam folder 7a/a.
5ilih elloSWT - elloSWT pada 8aunc5 con@igu$ation dan juga masukkan di mana file
%) hasilnya akan ditempatkan. ika nama direktori tidak diberikan$ ;'lipse akan meletakkan
file %) tersebut pada direktori di mana #orkspa'e berada$ yaitu di mana data proyek
ditempatkan. &Misalnya$ di komputer saya proyek 3elloSWT berada pada direktori
+:Dbelajarja!a.lyra''.'omD3elloSWT$ maka file %) tersebut akan diletakkan pada direktori
+:Dbelajarja!a.lyra''.'omD(
Klik 4inis5$ kemudian :; untuk setiap pertanyaan yang mungkin mun'ul berikutnya.
Sekarang$ gunakan Windo#s ;<plorer untuk men'ari di mana file %) hasilnya berada. =ouble
click pada file tersebut dan %nda akan bisa menjalankannya langsung seperti aplikasi lainnya.
%nda bisa juga mengirimkan file ini melalui email atau mengkopinya melalui flash disk ke
teman atau kerabat %nda tanpa perlu menyertakan ;'lipse.
!ATATA6 : Ingat bah#a SWT bergantung penuh pada sistem operasi yang %nda gunakan$
karena SWT menggunakan #idget ba#aan sistem operasi seperti dijelaskan pada bagian
sebelumnya. Ketika %nda membuat program ini pertama kali$ %nda menambahkan pustaka
SWT yang spesifik terhadap sistem operasi di mana ;'lipse berjalan. %rtinya$ jika %nda
menambahkan pustaka o$g%eclipse%s&t%&in'(%&in'(%)*+,'%-%.%/'--0c$ maka program %)
%nda hanya akan bisa dijalankan pada sistem operasi Windo#s. Untuk bisa menjalankannya
pada sistem operasi lain$ misalnya *inu<$ maka %nda harus menambahkan pustaka SWT
khusus *inu< yang bisa diunduh se'ara terpisah atau menggunakan ;'lipse pada *inu<.
Berikut ini adalah s'reen shot hasil jalannya program
Meli5at 8ebi5 =ekat elloSWT
Se'ara umum aplikasi SWT membutuhkan beberapa langkah sebagai berikut :
1. Buat Dspay baru
2. Buat satu atau ebh She
3. Buat manager ayout untuk She baru
4. Buat wdget d daam she
5. Buka |endea she
6. Buat peruangan pengrm event
7. Buang (dspose) dspay dan wdget-wdget annya
8. Tentunya mport berbaga paket yang dperukan oeh program
package hellos&t2

import org.e%lipse.s&t.SWT2
import org.e%lipse.s&t.layout.#o&3ayout2
import org.e%lipse.s&t.&i1gets.Display2
import org.e%lipse.s&t.&i1gets.3abel2
import org.e%lipse.s&t.&i1gets.Shell2

public class !elloSWT 9

/**
* @param args
*/
public static void main(String:; args) 9
Display 1isplay = new Display()2
Shell shell = new Shell(1isplay)2
shell.set3ayout( new #o&3ayout())2
3abel label = new 3abel(shell, SWT.4"4$)2
label.setTe)t(5!ello, Worl165)2
shell.pa%7()2
shell.open()2
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
1isplay.1ispose()2
label.1ispose()2
<
<
Mari kita bahas satu per satu
1. Membuat Display baru
Membuat ,isplay dapat dilakukan dengan membuat instansi dari objek bertipe ,isplay$ misalnya
seperti perintah berikut
Display 1isplay = new Display()2
,isplay &tampilan( adalah objek maya yang merupakan kontainer induk semua komponen GUI. Suatu
tampilan sebetulnya tidak terlihat$ akan tetapi komponen yang ditambahkan ke dalam tampilan dapat
dilihat. Biasanya$ suatu aplikasi hanya membutuhkan satu tampilan.
2. Membuat Shell baru
Membuat Shell dapat dilakukan dengan membuat instansi dari objek bertipe Shell$ misalnya seperti
perintah berikut
Shell shell = new Shell(1isplay)2
5ada pernyataan di atas$ konstruktor Shell mengambil parameter yang merupakan induk di mana shell
ini akan diletakkan. 5ada pernyataan di atas$ kita membuat objek shell bertipe Shell yang memiliki
induk objek 1isplay.
Shell adalah jendela suatu aplikasi. Shell tertinggi adalah shell yang berada langsung di ba#ah objek
bertipe ,isplay$ dan merupakan jendela utama suatu aplikasi. Shell sebenarnya adalah #idget
komposit$ yaitu suatu #idget yang terdiri dari beberapa #idget lain. 8leh karenanya shell juga bisa
berisi shell lain. Untuk aplikasi sederhana yang menampilkan kata 93ello WorldE9$ kita hanya
membutuhkan satu shell saja yang kita letakkan pada objek display.
3. Membuat manager layout untuk Shell baru
Untuk membuat manager layout$ kita menggunakan metode instansi dari objek shell$ yaitu
set3ayout() yang mengambil parameter jenis layout yang akan disusun pada shell. Misalnya$
shell.set3ayout( new #o&3ayout())2
5ada 'ontoh di atas$ kita memerintahkan objek shell untuk mengatur #idget.#idget di dalamnya dalam
urutan seperti baris. #o&3ayout adalah kelas layout yang digunakan objek shell untuk mengatur objek
#idget di dalamnya.
Manager layout digunakan untuk mengatur se'ara otomatis peletakkan setiap #idget. 5ada SWT$ objek
komposit seperti Shell tidak mengetahui bagaimana #idget harus ditampilkan. 8leh karenanya jika kita
tidak memberikan manager layout kepada objek bertipe Shell$ maka tidak ada #idget yang akan
ditampilkan.
Bahasan khusus tentang layout 'ukup kompleks$ dan karenanya kita akan bahas tersendiri pada bagian
selanjutnya.
4. Membuat widget di dalam shell
Widget adalah komponen pembangun GUI. Menu$ tombol$ teks$ kotak 'ek$ kotak input teks$ hingga
kan!as$ adalah 'ontoh.'ontoh #idget. Setiap #idget memiliki sifat dan 'ara kerja yang berbeda.beda.
5ada 'ontoh ini$ kita menggunakan #idget yang sangat sederhana yang dinamakan *abel. Widget ini
digunakan untuk menampilkan teks$ misalnya digunakan sebagai label atau pertanyaan pada suatu
input teks.
5ada 'ontoh 3elloSWT$ kita gunakan konstruktor yang mengambil 1 parameter. 7ang pertama$ adalah
kontainer induk di mana *abel ini akan ditampilkan$ dan parameter kedua adalah bit gaya.
3abel label = new 3abel(shell, SWT.4"4$)2
*abel ini kemudian kita isi dengan kata 93ello WordE9 untuk menampilkan kata ini pada jendela
utama.
label.setTe)t(5!ello, Worl165)2
5. Membuka jendela shell
Setelah ,isplay$ Shell$ dan #idget.#idgetnya disiapkan$ kita perlu se'ara eksplisit memerintahkan
shell untuk membuka jendela dan menggambar seluruh #idget yang sudah disiapkan. Untuk ini kita
gunakan perintah
shell.open()2
6. Membuat perulangan pengirim eent
SWT mengharuskan kita untuk membuat sendiri perulangan untuk mengirimkan e!ent. %rtinya$ blok
perintah berikut ini 9harus9 selalu ada dalam semua aplikasi SWT yang akan kita buat.
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
!. Membuang "dispose# display dan widget$widget lainnya
Karena SWT bekerja langsung dengan #idget ba#aan sistem operasi$ maka tanggung ja#ab untuk
menghapus komponen GUI ada di tangan programmernya. 3al ini disebabkan #idget tersebut berada
di luar jangkauan pemulung memori a!a yang hanya bisa meraih objek yang dibuat dan dijalankan
dalam 4M &a!a 4irtual Ma'hine(.
Untuk menghapus #idget dari memori$ kita dapat menggunakan metode 1ispose() yang dimiliki oleh
hampir semua #idget SWT. 5ada 'ontoh program ini$ kita memiliki 1 #idget$ yaitu shell dan label$
sehingga keduanya harus dihapus dengan menggunakan perintah
1isplay.1ispose()2
label.1ispose()2
%. Mengimport berbagai paket yang diperlukan oleh program
Kita bisa menggunakan ;'lipse untuk membantu kita mengimpor setiap paket &seperti yang
diilustrasikan pada bagian sebelumnya($ atau menggunakan #ild'ard seperti import
org.e%lipse.s&t.&i1gets.=
Beberapa paket penting yang tersedia pada SWT :
&ama 'aket (egunaan
org.ecpse.swt
Bers keas SWT, kumpuan konstanta, dan keas-keas
pengecuaan dan kesaahan
org.ecpse.swt.wdget
s
Wdget dan keas-keas yang berhubungan dengannya, msanya
menu, kotak daog, dukungan event, keas super abstrak untuk
ayout, dan sebaganya
org.ecpse.swt.events Event tngkat tngg, pendengar event, dan cookan (adapter)
org.ecpse.swt.ayout
Keas ayout standar sepert FLayout, RowLayout, GrdLayout,
FormLayout, dan keas-keas annya
org.ecpse.swt.graph
cs
Huruf, warna, gambar, dan operas grafk dasar, sepert untuk
menggambar gars dan ngkaran
org.ecpse.swt.custo
m
Wdget buatan sendr dan keas an yang dbuat khusus untuk
Ecpse; tdak bergantung pada patform apapun
(mpementasnya sama pada semua sstem operas)
org.ecpse.swt.dnd
Keas bantuan untuk meakukan drag-and-drop pada berbaga
patform
org.ecpse.swt.access
bty
Peruasan untuk memberkan bantuan dan dukungan untuk orang
cacat
org.ecpse.swt.prntn
g
Dukugan prnter dan kotak daog untuk meakukan percetakan
org.ecpse.swt.progra
m
Bers keas Program, untuk mempermudah pada saat program
d|aankan, pemetaan dokumen, dan con; |uga dbuat untuk
Ecpse, akan tetap sangat bergantung pada patformnya
(mpementasnya bsa berbeda untuk setap sstem operas)
org.ecpse.swt.browse
r
Menyedakan wdget sebaga web broswer, dan keas-keas yang
mendukungnya. Menggunakan browser bawaan sstem operas
untuk mpementasnya
org.ecpse.swt.awt
Menyedakan dukungan untuk membuat UI yang bers campuran
wdget dar SWT dan AWT
org.ecpse.swt.wn32.
oe
Hanya terseda pada Wndows; menyedakan fastas untuk
mengakses OLE (Ob|ect Lnkng and Embeddng)
Pengenalan ;onsep Widget pada SWT
Se'ara tradisional$ #idget bisa dibayangkan seperti perangkat abstrak yang berguna untuk melakukan
tugas tertentu. Istilah ini popules dalam bidan ekonomi. 5ara pembuat soft#are meminjam istilah ini
untuk menyebut suatu paket program pembuat GUI &grahi'al user interfa'e(. SWT adalah kepanjangan
dari Standard Widget Toolkit karena #idget merupakan dasar pembangun suatu aplikasi yang dibangun
dengan menggunakan SWT.
Apa itu &idgetA
Widget adalah elemen GUI yang dapat berinteraksi dengan user. Widget mengatur dan menentukan
kondisinya sendiri dengan memggunakan kombinasi beberapa operasi grafik. ,engan menggunakan
mouse atau keyboard$ user bisa mengubah kondisi suatu #idget. Ketika kondisi suatu #idget berubah$
baik diubah oleh user ataupun diubah oleh suatu kode program$ maka #idget akan menggambar dirinya
kembali untuk merefleksikan hasil perubahannya.
Siklus 5idup &idget
Widget memiliki siklus hidup sendiri. Widget dibuat oleh programmer dan dibuang ketika tidak lagi
dibutuhkan. Karena siklus hidup suatu #idget sangat penting untuk memahami SWT$ maka kita akan
bahas lebih jauh pada bagian ini.
-. Membuat Widget
Widget dibuat dengan menggunakan konstruktornya$ atau dengan kata lain membuat instansi suatu
kelas. Ketika #idget dibuat$ #idget akan mengambil sumber daya komputer &memori$ prosesor( dari
sistem operasi. %rtinya semua #idget akan berada di le!el sistem operasi$ sehingga unjuk kerja dan
pengaturan memori akan lebih optimal.
Konstruktor akan mengambil argumen yang biasanya tidak akan bisa diubah setelah #idget dibuat. %da
/ kemungkinan konstruktor dari suatu jenis #idget :
Wi1get()
Wi1get(Wi1get in1u7)
Wi1get(Wi1get in1u7, int bitGaya)
Wi1get(Wi1get in1u7, int bitGaya, int posisi)
Widget tidak bisa dibuat tanpa induk. Ini bisa dilihat dari pengenalan tentang #idget di bagian
sebelumnya bagaimana #idget tersusun se'ara hirarkis. enis induknya tergantung dari jenis
#idgetnya. Misalnya$ induk dari suatu menu harus berupa menu$ dan tidak bisa berupa tombol.
Kompiler akan menge'ek apakah induk suatu #idget sesuai dengan tipenya$ jika tidak$ kompiler akan
menampilkan pesan kesalahan. &5ada beberapa platform$ kita dibolehkan untuk mengubah induk suatu
#idget. %kan tetapi SWT tidak memiliki metode get5arent&( pada kelas.kelas Widgetnya. Ini
disebabkan karena kompleksitasnya yang mengharuskan kita untuk melakukan type 'ast kepada tipe
induk yang benar.(
Bit gaya &style( adalah nilai bit integer yang digunakan untuk mengatur perilaku dan tampilan suatu
#idget. Biasanya bit gaya hanya dibutuhkan pada saat #idget dibuat$ misalnya memilih jenis editor
multi baris atau baris tunggal. Karena atribut ini tidak bisa diubah setelah #idget dibuat$ maka gaya
suatu #idget juga tidak bisa diubah setelah #idget diinstansikan.
Semua gaya #idget dikumpulkan sebagai konstanta pada kelas org.e%lipse.s&t.SWT. Kita bisa
menggambungkan beberapa gaya dengan menggunakan operasi 8). Misalnya kode berikut akan
membuat #idget teks multi baris yang memiliki tepi serta s'roll bar hori?ontal dan !ertikal.
Te)t te7s = new Te)t (in1u7, SWT.>3T? | SWT.@,SC#"33 | SWT.!,SC#"33 | SWT.B"#D$#)2
Gaya suatu #idget bisa kita ambil setelah #idget tersebut dibuat dengan menggunakan metode instansi
getStyle(). Untuk mengujinya$ kita bisa menggunakan operasi %6, yang jika hasilnya tidak nol$
maka #idget tersebut memiliki gaya yang diuji. Misalnya$ kode berikut menguji apakah suatu #idget
teks memiliki tepi$ kemudian men'etak hasilnya pada konsol.
if ((te7s.getStyle() A SWT.B"#D$#) 6= B)
System.out.println(5te7s memili7i tepi5)2
else
System.out.println(5te7s ti1a7 memili7i tepi5)2
5aremeter posisi memungkinkan kita membuat #idget baru pada suatu induk di posisi tertentu. ika
tidak diberikan$ maka se'ara otomatis #idget baru akan ditempatkan di akhir posisi. 3al ini akan lebih
memudahkan kita untuk membuat #idget pada urutan tertentu$ misalnya membuat menu dengan urutan
tertentu.
1. Membuang #idget
Ketika #idget tidak lagi dibutuhkan$ termasuk ketika program selesai$ maka #idget harus dihapus
se'ara eksplisit dengan menggunakan metode instansi 1ispose(). Metode ini akan menyembunyikan
#idget$ menghapus #idget yang ditampungnya$ dan membuat semua referensi di dalamnya menjadi
null.
ika metode 1ispose() tidak dipanggil setelah program selesai dijalankan$ maka hal ini akan
menyebabkan kebo'oran memori$ di mana memori pada sistem operasi lambat laun akan habis
dipenuhi oleh #idget yang tidak dihapus setelah program selesai.
Memanggil metode 1ispose() untuk #idget yang sudah dibuang$ akan melemparkan penge'ualian
SWT$)%eption. Untuk mengetahui apakah suatu #idget sudah dihapus$ kita bisa menggunakan metode
instansi isDispose1().
%da dua aturan yang penting untuk diingat :
ika %nda membuat #idget$ maka pastikan %nda menghapusnya. %tau dengan kata lain$ semua
#idget yang %nda buat dengan konstruktor #ajib dihapus. %kan tetapi jika %nda mendapatkan
#idget dari metode instansi suatu #idget$ misalnya Cont huruD = 7ontrol.getCont()$ maka
%nda tidak perlu menghapusnya
ika %nda menghapus suatu #idget$ maka semua #idget di ba#ahnya akan dihapus juga. %tau
dengan kata lain$ jika %nda menghapus suatu Shell$ maka isi seluruh Shell akan dihapus se'ara
otomatis. ,emikian juga halnya dengan menu$ jika %nda menghapus menu utama$ maka semua
sub.menu akan otomatis dihapus.
E/ent dan 8istene$
E/ent
;!ent adalah inti dari pemrograman GUI. GUI program tidak memiliki alur apa yang akan terjadi
ketika program dijalankan$ dalam arti langkah per langkah dari a#al hingga akhir. %kan tetapi$
program harus bisa bereaksi akan berbagai e!ent &kejadian( yang bisa berasal dari mouse atau
keyboard. User bisa menekan tombol keyboard apa saja$ menggeser mouse$ atau menekan tombol
mouse. User bisa melakukannya kapan saja$ dan komputer harus bisa bereaksi dengan tepat.
,alam a!a$ e!ent dilambangkan oleh objek. Ketika suatu e!ent terjadi$ sistem akan mengumpulkan
informasi yang sesuai dengan e!en tersebut$ kemudian membuat objek yang berisi informasi ini. enis
e!en berbeda dilambangkan oleh objek dengan kelas yang berbeda pula. Setelah objek e!ent dibuat$ ia
akan diberikan sebagai parameter pada subrutin yang ditugaskan untuk menangani e!ent tersebut.
,engan menulis subrutin ini$ programmer bisa memberi tahu apa yang harus dilakukan jika mouse
diklik atau keyboard ditekan$ misalnya.
Sebagai programmer a!a$ kita hanya melihat e!en dari sisi yang lebih umum. Banyak sekali hal yang
terjadi antara tombol ditekan hingga subrutin yang kita buat melakukan tugasnya. Se'ara garis besar$
dalam metode main() kita harus menuliskan perulangan dalam bentuk seperti :
7eti7a program masih berEalanF
Tunggu hingga e/en beri7utnya terEa1i
Panggil subrutin untu7 menangai e/ent tersebut
5erulangan ini disebut perulangan e!ent. 5ada SWT kita harus menulis sendiri perulangan e!ent ini
pada metode main() kita dalam bentuk
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
SWT memiliki dua jenis e!ent$ yaitu e/ent tanpa tipe dan e!ent be$tipe%
;!ent tanpa tipe di#akili oleh kelas $/ent. Kelas ini menyimpan informasi yang berbeda.beda
tergantung dari jenis. %kan tetapi se'ara umum semua e!ent jenis apapun memiliki informasi berikut :
In@o$masi Pen1elasan
display ,isplay di mana e!ent ini terjadi
#idget Widget di mana e!ent ini terjadi
type enis e!ent yang terjadi
enis e!ent yang terjadi beserta penjelasannya dirangkum dalam tabel berikut ini :
7enis E/ent Pen1elasan
SWT.Key,o#n Tombol ditekan
SWT.KeyUp Tombol dilepaskan
SWT.Mouse,o#n Tombol mouse ditekan
SWT.MouseUp Tombol mouse dilepaskan
SWT.MouseMo!e Mouse berpindah posisi
SWT.Mouse;nter Mouse masuk ke #ilayah klien
SWT.Mouse3o!er Mouse berada di sekitar klien
SWT.Mouse;<it Mouse keluar dari #ilayah klien
SWT.Mouse,ouble+li'k Mouse di.double 'li'k
SWT.5aint Suatu #idget diberi perintah untuk menggambar dirinya
SWT.Mo!e 5osisi suatu #idget berubah
SWT.)esi?e Ukuran #idget berubah
SWT.,ispose Widget dihapus
SWT.Sele'tion
Suatu aksi pemilihan dilakukan dalam #idget &misalnya memilih item pada
drop do#n list
SWT.,efaultSele'tion %da pilihan a#al pada suatu #idget
SWT.@o'usIn Widget menerima fokus dari keyboard
SWT.@o'us8ut Widget kehilangan fokus dari keyboard
SWT.;<pand Item pada pohon dikembangkan
SWT.+ollapse Item pada pohon ditutup
SWT.I'onify endela Shell diminimasi
SWT.,ei'onify endela Shell dibuka &restore(
SWT.+lose endela Shell ditutup &dengan tombol F(
SWT.Sho# Widget bisa dilihat
SWT.3ide Widget disembunyikan
SWT.Modify Teks berubah pada suatu kontrol
SWT.4erify Input teks sedang di!erifikasi
SWT.%'ti!ate Widget sedang diaktifkan
SWT.,ea'ti!ate Widget dimatikan
SWT.3elp User meminta pertolongan tentang suatu #idget
SWT.,rag,ete't %ksi drag.and.drop dideteksi
SWT.Menu,ete't User menekan tombol kik kanan untuk mengaktifkan menu konteks
SWT.%rm Item pada menu digambarkan
SWT.Tra!erse 6a!igasi pada keyboard dideteksi
SWT.3ardKey,o#n Tombol pada hard#are ditekan &untuk perangkat genggam(
SWT.3ardKeyUp Tombol pada hard#are dilepas &untuk perangkat genggam(
Suatu e!ent juga bisa memiliki tipe. %rtinya e!ent yang dihasilkan merupakan objek bertipe suatu
kelas$ misalnya Mouse;!ent$ bukan hanya bertipe kelas ;!ent yang jenisnya disimpan dalam !ariabel
tertentu. ;!ent bertipe mengikuti pola a!aBeans standar. Kelas.kelas ini terdapat dalam paket
org.e%lipse.s&t.e/ents
Tabel berikut menggambarkan perbandingan antara e!ent bertipe dan jenis e!ent dari e!ent tanpa tipe.
E/ent Be$tipe 7enis E/ent Tanpa Tipe
%rm;!ent SWT.%rm
+ontrol;!ent
SWT.Mo!e
SWT.)esi?e
,ispose;!ent SWT.,ispose
@o'us;!ent
SWT.@o'usIn
SWT.@o'us8ut
3elp;!ent SWT.3elp
Key;!ent
SWT.Key,o#n
SWT.KeyUp
Menu;!ent
SWT.3ide
SWT.Sho#
Modify;!ent SWT.Modify
Mouse;!ent
SWT.Mouse,ouble+li'k
SWT.Mouse,o#n
SWT.MouseUp
Mouse;!ent SWT.MouseMo!e
Mouse;!ent
SWT.Mouse;nter
SWT.Mouse;<it
SWT.Mouse3o!er
5aint;!ent SWT.5aint
Sele'tion;!ent
SWT.,efaultSele'tion
SWT.Sele'tion
Shell;!ent
SWT.%'ti!ate
SWT.+lose
SWT.,ea'ti!ate
SWT.I'onify
SWT.,ei'onify
Tra!erse;!ent SWT.Tra!erse
Tree;!ent
SWT.+ollapse
SWT.;<pand
4erify;!ent SWT.4erify
5ertanyannya kenapa ada dua jenis e!ent yang berbeda"
5ada !ersi a#al SWT$ hanya ada satu jenis yaitu jenis tanpa tipe. Setelah diskusi yang 'ukup antar
beberapa programmer ;'lipse$ komunitas user SWT dan de!elopernya$ maka akhirnya diputuskan
untuk menambahkan jenis bertipe seperti pada a!aBeans. %lasannya adalah untuk memudahkan
pemrograman SWT bagi programmer yang sudah terlanjur terbiasa dengan %WT=S#ing. enis tanpa
tipe masih tetap ada seperti biasa.
8istene$
Supaya suatu e!ent berarti$ suatu program harus bisa mendeteksi e!ent dan bereaksi akan e!ent
tersebut. Untuk mendeteksi suatu e!ent$ suatu program harus mendengarkannya. Mendengarkan e!ent
ini dilakukan oleh objek yang berna$a pendengar e!ent &e!ent listener(. 8bjek listener harus memiliki
metode instansi untuk menangani e!ent yang didengarkannya. Bentuknya ber!ariasi tergantung dari
jenis e!ent yang ditanganinya.
%da beberapa hal detail yang harus diingat untuk bisa bekerja dengan e!ent. Beberapa langkah yang
harus diingat :
-. Menambahkan import paket yang dibutuhkan$ misalnya 9org.e'lipse.s#t.e!ents9
1. Mendeklarasikan kelas yang mengimplementasikan interfa'e suatu listener
G. Menambahkan aksi yang dilakukan oleh kelas baru tersebut. %ksi ini adalah aksi yang dilakukan
untuk menangani suatu e!ent
/. Mendaftarkan e!ent tersebut ke komponen yang mungkin memberikan e!ent.
8bjek apapun bisa bertindah sebagai e!ent listener asalkan ia mengimplementasikan interfa'e yang
tepat. Suatu komponen dapat mendengarkan e!ent yang dihasilkannya sendiri. Suatu kelas dapat dibuat
se'ara khusus hanya untuk mendengarkan suatu e!ent. Kebanyakan orang menganggap lebih mudah
untuk menggunakan kelas bertingkat anonim untuk mendengarkan suatu objek. &Kelas bertingkat
anonim telah dibahas sebelumnya di sini(.
Seperti hanya ;!ent$ SWT memiliki dua jenis listener : tanpa tipe dan bertipe. Masing.masing
digunakan untuk menangani e!ent tanpa tipe dan e!ent bertipe.
8istene$ Tanpa Tipe >untuk menangani e/ent tanpa tipe?
nterfa'e generik yang digunakan untuk menangai e!ent tanpa tipe dinamakan 3istener. *istener tanpa
tipe dapat ditambahkan pada suatu #idget dengan menggunakan metode a113istener().
Metode a113istener() memiliki bentuk seperti
a113istener(int Eenis$/ent, 3istener listener)
Metode ini akan menambah listener ke dalam koleksi listener yang akan dipanggil ketika e!ent tipe
tertentu terjadi. Ketika suatu e!ent terjadi$ maka listener akan dipanggil dengan menggunakan metode
han1le$/ent().
+ontoh berikut mengilustrasikan bagaimana menambah suatu *istener ke dalam suatu #idget$ yang
akan dipanggil ketika e!ent SWT.,ispose terjadi.
&i1get.a113istener(SWT.Dispose, new 3istener() 9
public void han1le$/ent($/ent e/ent) 9
// widget was disposed
<
<)2
5erhatikan bah#a bentuk di atas menggunakan kelas anonim yang langsung diturunkan dari interfa'e
*istener. ,i dalam kelas anonim tersebut$ metode han1le$/ent() harus diimplementasikan$ di mana
implementasinya adalah tugas yang harus dilakukan ketika #idget dihapus.
ika beberapa listener ditambahkan$ maka mereka akan dipanggil dengan urutan ketika mereka
ditambahkan &first in first 'alled(. %rtinya listener pertama diberi kesempatan untuk mengolah e!ent
&mungkin untuk memfilter sejumlah data( sebelum listener lain melakukan tugasnya. Kita juga bisa
menambah listener yang sama beberapa kali$ yang artinya listener tersebut akan dipanggil beberapa
kali.
Kita bisa menghapus listener dari suatu #idget dengan menggunakan metode remo/e3istener().
Bentuknya adalah sebagai berikut
remo/e3istener(int Eenis$/ent, 3istener listener)
Untuk menghapus suatu listener$ kita harus memberikan instansi yang persisi sama ketika listener
tersebut ditambahkan. Ika beberapa instansi listener yang sama sudah ditambahkan sebelumnya$ maka
kita harus menghapusnya berulang kali sejumlah ia ditambahkan. Se'ara umum$ menghapus suatu
listener mungkin tidak diperlukan. *istener akan diambil oleh pemulung memori ketika suatu #idget
dihapus dan listener ini tidak lagi digunakan di manapun di dalam program.
Kita juga bisa memanggil suatu listener untuk melakukan tugas tertentu$ yaitu dengan menggunakan
metode notiDy3isteners$ yang memiliki bentuk seperti
notiDy3isteners(int Eenis$/ent, $/ent e/ent)
Eenis$/ent adalah jenis e!ent yang akan dilakukan$ dan ;!ent adalah objek yang berisi e!ent yang
akan dilakukan. 3al penting yang harus di'atat adalah memanggil metode notiDy3isteners() tidak
menyebabkan e!ent akan benar.benar terjadi. Misalnya memanggil notiDy3isteners() dengan jenis
SWT.>ouseDo&n tidak akan menyebabkan tombol terlihat seperti ditekan. ,an juga memanggil
notiDy3isteners() tidak menjamin bah#a semua data pada e!ent terinisialisasi seperti pada e!ent
sesungguhnya.
8istene$ Be$tipe >untuk menangani E/ent be$tipe?
Karena e!ent bertipe dibuat mengikuti pola listener pada a!aBeans$ penggunaan listener bertipe sangat
mirip dengan penggunaan listener pada %WT=S#ing.
Misalnya untuk mendengarkan e!ent ketika suatu #idget dihapus$ maka aplikasi bisa menggunakan
a11Dispose3istener()$ yang memiliki bentuk seperti
a11Dispose3istener(Dispose3istener listener)
Metode ini menambahkan listener ke dalam koleksi listener yang akan dipanggil ketike suatu #idget
dihapus. Ketika suatu #idget dihapus$ maka listener akan dipanggil dengan memanggil metode
&i1getDispose1().
5otongan kode berikut digunakan untuk menangani e!ent ketika suatu #idget dihapus.
&i1get.a11Dispose3istener(new Dispose3istener() 9
public void &i1getDispose1(Dispose$/ent e/ent) 9
// widget was disposed
<
<)2
Dispose3istener adalah suatu interfa'e. ika ada lebih dari satu metode yang didefinisikan dalam
listener$ maka SWT akan se'ara otomatis menambahkan kelas adapter yang berisi implementasi
kosong dari metode.metode yang didefinisikan pada interfa'e tersebut. Misalnya interfa'e
Sele%tion3istener memiliki dua metode$ yaitu &i1getSele%te1() dan &i1getDeDaultSele%te1$
yang keduanya mengambil argumen bertipe Sele%tion$/ents. ,alam hal ini kelas
Sele%tion81apter tersedia untuk memberikan implementasi kosong untuk setiap metode. Kelas
adapter ini hanyalah sebagai kelas bantu yang sesuai dengan kon!ensi pada listener a!aBeans.
*istener bertipe bisa dihapus dengan menggunakan metode penghapus untuk setiap listner. Misalnya$
listener untuk e!ent ketika suatu #idget dihapus bisa dibuang dengan menggunakan
remo/eDispose3istener()$ yang memiliki bentuk
remo/eDispose3istener(Dispose3istener listener)
listener adalah objek listener yang akan dihapus dari koleksi listener yang dipanggil ketika #idget
dihapus.
Tabel berikut merangkum e!ent bertipe$ nama interfa'e listener yang menanganinya$ serta metode pada
interfa'e tersebut$ dibandingkan dengan listener tanpa tipe.
E/ent Be$tipe Inte$@ace 8istene$ Metode 7enis E/ent Tanpa Tipe
%rm;!ent %rm*istener #idget%rmed&%rm;!ent( SWT.%rm
+ontrol;!ent
+ontrol*istener &dan
+ontrol%dapter(
'ontrolMo!ed&+ontrol;!ent(
'ontrol)esi?ed&+ontrol;!ent(
SWT.Mo!e
SWT.)esi?e
,ispose;!ent ,ispose*istener #idget,isposed&,ispose;!ent( SWT.,ispose
@o'us;!ent
@o'us*istener &dan
@o'us%dapter(
fo'usGained&@o'us;!ent(
fo'us*ost&@o'us;!ent(
SWT.@o'usIn
SWT.@o'us8ut
3elp;!ent 3elp*istener help)eHuested&3elp;!ent( SWT.3elp
Key;!ent
Key*istener &dan
Key%dapter(
key5ressed&Key;!ent(
key)eleased&key;!ent(
SWT.Key,o#n
SWT.KeyUp
Menu;!ent
Menu*istener &dan
Menu%dapter(
menu3idden&Menu;!ent(
menuSho#n&Menu;!ent(
SWT.3ide
SWT.Sho#
Modify;!ent Modify*istener modifyTe<t&Modify;!ent( SWT.Modify
Mouse;!ent
Mouse*istener &dan
Mouse%dapter(
mouse,ouble+li'k&Mouse;!ent(
mouse,o#n&Mouse;!ent(
mouseUp&Mouse;!ent(
SWT.Mouse,ouble+li'k
SWT.Mouse,o#n
SWT.MouseUp
Mouse;!ent MouseMo!e*istener mouseMo!e&Mouse;!ent( SWT.MouseMo!e
Mouse;!ent
MouseTra'k*istener
&dan
MouseTra'k%dapter(
mouse;nter&Mouse;!ent(
mouse;<it&Mouse;!ent(
mouse3o!er&Mouse;!ent(
SWT.Mouse;nter
SWT.Mouse;<it
SWT.Mouse3o!er
5aint;!ent 5aint*istener paint+ontrol&5aint;!ent( SWT.5aint
Sele'tion;!ent
Sele'tion*istener
&dan
Sele'tion%dapter(
#idget,efaultSele'ted&Sele'tion;!ent(
#idgetSele'ted&Sele'tion;!ent(
SWT.,efaultSele'tion
SWT.Sele'tion
Shell;!ent
Shall*istener &dan
Shell%dapter(
shell%'ti!ated&Shell;!ent(
shell+losed&Shell;!ent(
shell,ea'ti!ated&Shell;!ent(
shellI'onified&Shell;!ent(
shell,ei'onified&Shell;!ent(
SWT.%'ti!ate
SWT.+lose
SWT.,ea'ti!ate
SWT.I'onify
SWT.,ei'onify
Tra!erse;!ent Tra!erse*istener keyTra!ersed&Tra!erse;!ent( SWT.Tra!erse
Tree;!ent
Tree*istener &dan
Tree%dapter(
tree+ollapsed&Tree;!ent(
tree;<panded&Tree;!ent(
SWT.+ollapse
SWT.;<pand
4erify;!ent 4erify*istener !erifyTe<t&4erify;!ent( SWT.4erify
Penanganan Mouse
Semua sistem operasi di mana SWT diimplementasikan mendukung perangkat tunjuk. Biasanya
berbentuk mouse$ akan tetapi bisa jadi berupa tra'kball$ tra'kpad$ atau jenis perangkat keras
lainnya. 5ada komputer genggam$ perangkat tunjuk bisa jadi berupa stylus. Untuk
mempermudah pembahasan$ kita akan gunakan mouse sebagai perangkat tunjuk$ tidak peduli
bagaimana perangkat aslinya.
5osisi suatu mouse biasanya digambarkan dalam bentuk ikon ke'il pada layar yang disebut
kursor. 3al ini berlaku untuk semua platform$ ke'uali pada Windo#s +;$ karena perangkat
Windo#s +; biasanya berupa perangkat tunjuk 9langsung9$ seperti stylys$ yang tidak
membutuhkan kursor.
Mouse biasanya memiliki tiga tombol &ke'uali pada Ma'intosh yang hanya memiliki satu
tombol$ #alaupun sebenarnya mouse lebih dari - tombol pun bisa digunakan(. Mouse
digunakan untuk menunjuk$ klik$ geser &drag( dan memilih komponen kontrol GUI. Bisa juga
digunakan untuk menampilkan menu konteks yang biasanya ditampilkan dengan mengklik
kanan suatu mouse. 5erilaku 9drag.and.drop9 mouse kurang lebih sangat bergantung pada
platformnya.
Ketika kita menggeser mouse$ kursor akan berbah bentuk$ tergantung dari kontrol apa di
ba#ahnya. Misalnya$ #idget teks akan mengubah tampilan kursor seperti huruf I untuk
menunjukkan bah#a user bisa mengetikkan sesuatu pada #idget tersebut. ,i dalam kursor$ ada
titik pusat yang menunjukkan koordinat < dan y suatu mouse ketika e!ent pada mouse terjadi.
E/ent pada Mouse
Ketika tombol mouse ditekan atau mouse digerakkan$ e!ent mouse dibuat dan akan diberikan
kepada #idget yang ada di ba#ahnya. %kan tetapi ketika tombol mouse ditekan dan ditahan
&terus ditekan($ dan mouse berada di luar #idget &mungkin ada di #idget lain atau pada aplikasi
lain di desktop($ e!entnya akan diberikan kepada #idget a#al di mana mouse tersebut ditekan.
5engalihan e!ent sementara ini disebut pengambilan mouse. Widget yang menerima e!ent
disebut #idget pengambil. 5engambilan mouse terhadi se'ara otomatis pada SWT. &Ini
mungkin bukan sesuatu masalah$ akan tetapi sebagai informasi saja kepada %nda(.
Tabel . Isi ;!ent Mouse ketika suatu tombol mouse ditekan$ dilepaskan atau mouse digeser
6ama 4ield Pen1elasan
Button Tombol yang ditekan atau dilepaskan
F Koordinat < ketika e!ent terjadi
7 Koordinat y ketika e!ent terjadi
stateMask Bit mask yang menyatakan kondisi keyboard dan mouse sebelum e!ent terjadi
Ketika mouse ditekan atau dilepas$ field bernama 9button9 akan diisi oleh tombol mana yang
ditekan. Tombol mouse diberi nomor dari kiri ke kanan yang dimulai dari -. Untuk user kidal
&dan mengkonfigurasi sistem operasi untuk orang kidal($ penomoran tombol tetap sama$ akan
tetapi dimulai dari kanan ke kiri. 5emetaan tombol untuk orang kidal ini tidak tampak oleh
SWT dan aplikasi kita$ karena dilakukan se'ara otomatis oleh sistem operasi.
Ketika terjadi e!ent pada mouse$ koordinat < dan y.nya juga dilaporkan dalam e!ent. Koordinat
yang dilaporkan adalah koordinat relatif #idget ketika e!ent tersebut dibuat &bukan koordinat
global layar atau aplikasi kita(. Karena user mungkin telah memindahkan mouse setelah
menekan tombol$ maka lokasi sebenarnya ketika e!ent ini ditangani mungkin berbeda dengan
ketika e!ent dibuat. 3al ini untuk menghindari program kita untuk bertindak terlalu sensitif
terhadap pergerakan mouse. &ika kita membutuhkan lokasi yang aktual pada saat.saat tertentu$
kita bisa menggunakan metode getCursor3o%ation() yang dimiliki oleh kelas Display.(
;!ent pada mouse juga menggunakan field lain yang dinamakan state>as7 untuk
menunjukkan keadaan mouse. Seperti pada penanda tombol$ state>as7 berisi keadaan mouse
sebelum terjadinya suatu e!ent. Misalnya$ jika tidak ada tombol mouse yang ditekan atau
tombol keyboard lain yang ditekan ketika tombol kiri mouse ditekan$ maka e!ent mouse akan
diisi dengan button bernilai - dan state>as7 bernilai 0. state>as7 tidak berisi 9tombol -9.
%kan tetapi ketika terjadi e!ent lain ketika mouse kiri sedang ditekan$ maka state>as7 akan
berisi -.
Keadaan suatu mouse dilambangkan oleh konstanta pada kelas SWT$ seperti pada tabel
berikut :
stateMask Pen1elasan
SWT.BUTT86- Tombol - ditekan
SWT.BUTT861 Tombol 1 ditekan
SWT.BUTT86G Tombol G ditekan
SWT.BUTT86IM%SK Bit#ise.8) dari tombol.tombol yang ditekan
Berikut ini adalah e!ent pada mouse yang disediakan oleh SWT. Seperti disebutkan pada
bagian sebelumnya$ e!ent dan listener SWT terdiri dari e!ent=listener tanpa tipe dan
e!ent=listener bertipe. Keduanya disarikan dalam tabel berikut :
;elas E/ent
>e/ent
Inte$@ace2;elas
8istene$ &listener
Metode >listene$ be$tipe? 7enis e/ent >e/ent
tanpa tipe(
Pen1elasan
be$tipe? bertipe(
Mouse;!ent
Mouse*istener &dan
Mouse%dapter(
mouse,ouble+li'k&Mouse;!en
t(
SWT.Mouse,ouble+li'
k
Mouse di.
double
'li'k
mouse,o#n&Mouse;!ent( SWT.Mouse,o#n
Tombol
mouse
ditekan
mouseUp&Mouse;!ent( SWT.MouseUp
Tombol
mouse
dilepaskan
Mouse;!ent MouseMo!e*istener mouseMo!e&Mouse;!ent( SWT.MouseMo!e
Mouse
berpindah
posisi
Mouse;!ent
MouseTra'k*istener
&dan
MouseTra'k%dapter
(
mouse;nter&Mouse;!ent( SWT.Mouse;nter
Mouse
masuk ke
#ilayah
klien
mouse;<it&Mouse;!ent( SWT.Mouse;<it
Mouse
berada di
sekitar
klien
mouse3o!er&Mouse;!ent( SWT.Mouse3o!er
Mouse
keluar dari
#ilayah
klien
Mari kita lihat 'ontoh penggunaan mouse e!ent pada program berikut. %nda bisa mengunduh
program ini dan mengimportnya pada ;'lipse di sini.
package net.lyra%%.pela%a7mouse2

import org.e%lipse.s&t.=2
import org.e%lipse.s&t.&i1gets.=2

public class Pela%a7>ouse 9

/**
* @param args
*/
public static void main(String:; args) 9
// Membuat display dan shell baru
Display 1isplay = new Display()2
Shell shell = new Shell(1isplay)2

// Kelas Listener baru, menggunakan listener tanpa tipe
3istener mouse3istener = new 3istener() 9

// metode handleEvent pada interface Listener harus
diimplementasikan
public void han1le$/ent($/ent e) 9
String output = 54G4"W452
switch (e.type) 9
case SWT.>ouseDo&nF output = 5D"W452 break2
case SWT.>ousepF output = 5P52 break2
case SWT.>ouse>o/eF output = 5>"@$52 break2
case SWT.>ouseDoubleCli%7F
output = 5D"B3$52
break2
case SWT.>ouse$nterF output=5$4T$#52 break2
case SWT.>ouse$)itF output = 5$H?T52 break2
case SWT.>ouse!o/erF output=5!"@$#52 break2
<

// Mengambil stateMask pada event, kemudian menampilkannya
// dalam bentuk heksadesimal
output I= 5F state>as7=B)5
I ?nteger.to!e)String(e.state>as7)2

// Jika tombol Ctrl ditekan, tambahkan C!L pada keluarannya
if ((e.state>as7 A SWT.CT#3) 6= B)
output I= 5 CT#352

// Jika tombol "lt ditekan, tambahkan "L pada keluarannya
if ((e.state>as7 A SWT.83T) 6= B)
output I= 5 83T52

// Jika tombol #hift ditekan, tambahkan #$%& pada
keluarannya
if ((e.state>as7 A SWT.S!?CT) 6= B)
output I= 5 S!?CT52

// Jika tombol Command ditekan, tambahkan C'MM"() pada
keluarannya
if ((e.state>as7 A SWT.C">>84D) 6= B)
output I= 5 C">>84D52

// Jika tombol kiri mouse ditekan, tambahkan *+'(, pada
keluarannya
if ((e.state>as7 A SWT.BTT"4.) 6= B)
output I= 5 BTT"4.52

// Jika tombol tengah mouse ditekan, tambahkan *+'(- pada
keluarannya
if ((e.state>as7 A SWT.BTT"4() 6= B)
output I= 5 BTT"4(52

// Jika tombol kanan mouse ditekan, tambahkan *+'(. pada
keluarannya
if ((e.state>as7 A SWT.BTT"4') 6= B)
output I= 5 BTT"4'52

// Mengambil field button pada event, kemudian
menampilkannya
// dalam bentuk heksadesimal
output I= 5, button=B)5
I ?nteger.to!e)String(e.button)2

// Mengambil koordinat / dan y
output I= 5, )=5 I e.) I 5, y=5 I e.y2

// Menampilkan pesan keluaran pada konsol
System.out.println(output)2
<

<2

// ambahkan listener pada setiap event yang ingin kita pantau
shell.a113istener(SWT.>ouseDo&n, mouse3istener)2
shell.a113istener(SWT.>ousep, mouse3istener)2
shell.a113istener(SWT.>ouse>o/e, mouse3istener)2
shell.a113istener(SWT.>ouseDoubleCli%7, mouse3istener)2
shell.a113istener(SWT.>ouse$nter, mouse3istener)2
shell.a113istener(SWT.>ouse$)it, mouse3istener)2
shell.a113istener(SWT.>ouse!o/er, mouse3istener)2

// +bah ukuran 0endela men0adi -11 / -11 piksel
shell.setSiJe((BB, (BB)2

// 2erintah 3standar3 #4, harus ada pada setiap aplikasi #4
shell.open()2
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
1isplay.1ispose()2
<
<
5rogram di atas akan mela'ak akti!itas mouse kemudian menampilkannya pada konsol. angan
lupa untuk menambahkan pustaka SWT sebelum menjalankan program ini seperti dibahas pada
bagian ini.
Klik )un pada ;'lipse dan jalankan sebagai a!a %ppli'ation. Setelah jendela aplikasi yang kita
buat keluar$ 'oba jalankan mouse dan perhatikan 9+onsole9 pada ;'lipse seperti gambar
berikut.


Penanganan ;eyboa$d
Membuat %5I yang bisa dijalankan di berbagai platform untuk mengakses keyboard bukan sesuatu
yang mudah. Bahkan untuk platform yang sama tetapi dengan !ersi sistem operasi atau kedaerahan
&lo'ale( yang berbeda$ karakter bisa dimasukkan dengan 'ara yang berbeda.
Metode input$ atau sering juga disebut IM &input method( atau IM; &input method engine($ adalah
mesin pengolah karakter yang disediakan oleh setiap sistem operasi. Tugasnya untuk mengubah urutan
tombol keyboard menjadi karakter yang bisa diba'a sesuai dengan konfigurasi lo'ale usernya.
Misalnya$ pada lo'ale epang$ tombol yang dimasukkan diproses oleh IM; sehingga user bisa
memasukkan karakter Kanji.
Untungnya$ kebanyakan kontrol &#idget yang bisa berinteraksi dengan user( bisa menangani keyboard
tanpa perlu 'ampur tangan aplikasi. Misalnya$ ketika user memasukkan karakter Kanji pada kontrol
teks$ kontrol tersebut akan mengolah karakter dan menampilkannya. ika ada menu konteks$ maka
menu ini akan se'ara otomatis disediakan.
Ketika user menekan tombol pada mouse$ maka e!ent yang dihasilkan akan diberikan kepada #idget
yang ada diba#ahnya. %pa yang terjadi ketika tombol keyboard di tekan" Komponen mana yang harus
menangani e!ent yang dihasilkan"
Ketika suatu tombol pada keyboard ditekan$ tombol tersebut akan diberikan kepada subsistem berikut
dalam urutan :
-. Sistem jendela
1. %kselerator untuk menu
G. Tra!ersal
/. Kontrol fokus
%rtinya setiap subsistem diberi kesempatan untuk bereaksi terhadap tombol keyboard$ dalam urutan
seperti di atas. ika salah satu subsistem mampu menangani tombol tersebut$ maka tombol ini tidak
akan diteruskan ke subsistem berikutnya. ,alam hal ini kita sebut tombol tersebut telah digunakan.
Kita akan diskusikan setiap subsistem dari ba#ah ke atas$ mulai dari kontrol fokus$ karena konsep ini
adalah konsep dasar yang diperlukan dalam pemrograman GUI.
;ont$ol 4okus
5rogram GUI menggunakan fokus input untuk menentukan komponen mana yang yang harus
menangani e!ent dari keyboard. 5ada suatu saat$ hanya ada elemen pada layar yang bisa menerima
input$ yaitu di mana semua e!ent dari keyboard akan diarahkan. Mungkin merupakan sesuatu yang baik
untuk memberi user sedikit bantuan untuk mengetahui apakah suatu komponen memiliki fokus input.
Misalnya$ jika komponen tersebut adalah tempat mengetik pada program pengolah kata$ maka biasanya
kursornya akan berubah menjadi bentuk I dan berkedip.kedip. +ontoh lainnya adalah misalnya dalam
suatu formulir$ input teks yang sedang dalam fokus memiliki #arna latar belakang yang berbeda
dengan input teks yang tidak memiliki fokus.
Untuk memberikan fokus kepada suatu komponen$ kita bisa menggunakan metode setCo%us() yang
terdapat pada hampir semua #idget. ika 7ontrol adalah objek bertipe suatu #idget yang bisa
menerima fokus dan su7ses adalah !ariabel bertipe boolean$ maka
su7ses = 7ontrol.setCo%us()2
memberi perintah kepada kontrol untuk men'oba mengambil fokus input. ika 7ontrol atau salah satu
komponen yang ditampungnya berhasil mengambil fokus$ fungsi ini akan mengembalikan true. ika
gagal$ maka false akan dikembalikan. Widget komposit &yaitu #idget yang bisa berisi #idget.#idget
lain( akan berusaha untuk memberi fokus kepada #idget yang ditampungnya sebelum mengambil
fokus untuk dirinya sendiri. Beberapa #idget lain$ seperti label$ biasanya tidak mengambil fokus. Suatu
kontrol tidak bisa mengambil fokus jika ia tidak aktif atau disembunyikan$ atau jika input diblokade
karena modalitas &atau karena kontrol lain tidak mengijinkan fokus berpindah tempat(.
@ungsi lain 7ontrol.isCo%usControl() mengembalikan true jika kontrol tersebut sedang memegang
fokus atau false jika tidak. Kita juga bisa men'ari tahu kontrol mana yang sedang memiliki fokus
dengan menggunakan metode pada kelas Display yaitu Display.getCo%usControl().
Berikut ini adalah daftar e!ent dan listener yang berkaitan dengan fokus.
;elas E/ent
>e/ent be$tipe?
Inte$@ace2;elas
8istene$ >listene$
be$tipe?
Metode >listene$ be$tipe?
7enis e/ent >e/ent
tanpa tipe(
Pen1elasan
@o'us;!ent
@o'us*istener &dan
@o'us%dapter(
fo'usGained&@o'us;!ent( SWT.@o'usIn
Widget menerima
fokus dari
keyboard
fo'us*ost&@o'us;!ent( SWT.@o'us8ut
Widget
kehilangan fokus
dari keyboard
Mari kita lihat 'ontoh berikut ini untuk memahami lebih lanjut tentang fokus input. Kita akan buat 1
#idget yang berupa input teks. Ketika input teks atas menerima fokus$ maka judul aplikasi kita ganti
dengan 9@okus pada input teks atas9. Ketika input teks ba#ah menerima fokus$ maka judul aplikasi kita
ganti dengan 9@okus pada input teks ba#ah9. ika input teks atas kehilangan fokus$ kita isi input teks
yang kehilangan fokus dengan 9Saya kehilangan fokus9$ begitu input teks atas menerima fokus
kembali$ kita akan hapus kalimat tersebut.
+ontoh program ini dapat %nda unduh di sini$ untuk diimport pada ;'lipse. 5embahasan detail tentang
'ontoh program ini akan dibahas kemudian.
E/ent pada Tombol
Ketika suatu tombol pada keyboard ditekan$ e!ent tombol akan dibuat dan diberikan kepada aplikasi
kita. %kan tetapi$ tergantung pada platformnya$ kedaerahan &lo'ale($ dan kombinasi tombol$ ada
kalanya e!ent tidak terjadi. Misalnya$ pada karakter ;ropa yang memiliki aksen$ mesin pengolah
karakter dari sistem operasi akan mengambil tombol tersebut untuk diolah. Misalnya pada kedaerahan
erman jika karakter J ditekan kemudian diikuti dengan tombol e$ maka karakter K akan ditampilkan.
,emikian juga jika tombol bantu ditekan untuk mengolah bahasa epang$ IM; akan mengolah urutan
karakter menjadi karakter Kanji.
,engan kata lain$ e!ent tingkat rendah seperti ini sangat bergantung pada platform dan sistem operasi$
sehingga tidak terlalu berguna untuk kebanyakan program. SWT menyembunyikan e!ent sistem
operasi dan hanya menampilkan satu e!ent tombol saja setelah sistem operasi selesai mengolah tombol
tersebut.
Berikut ini adalah daftar e!ent dan listener yang berkaitan dengan tombol.
;elas E/ent
>e/ent be$tipe?
Inte$@ace2;elas
8istene$ >listene$
be$tipe?
Metode >listene$
be$tipe?
7enis e/ent >e/ent
tanpa tipe(
Pen1elasan
Key;!ent
Key*istener &dan
Key%dapter(
key5ressed&Key;!ent( SWT.Key,o#n
Tombol
ditekan
key)eleased&key;!ent( SWT.KeyUp
Tombol
dilepaskan
;!ent SWT.Key,o#n dan SWT.KeyUp merupakan representasi tingkat tinggi dari tombol yang
ditekan dan dilepaskan. ;!ent.e!ent ini berguna jika kita ingin men'egat suatu tombol tertentu dan
melakukan aksi khusus ketika tombol itu ditekan.
Berikut ini adalah isi e!ent keyboard ketika ditekan=dilepaskan.
6ama 4ield Pen1elasan
'hara'ter 6ilai Uni'ode dari karakter yang ditekan
key+ode Konstanta yang menunjukkan tombol mana yang ditekan$ misalnya SWT.5%G;IU5
stateMask Melambangkan tombol tambahan$ misalnya SWT.S3I@T
doit Suatu boolean yang bisa digunakan untuk membatalkan aksi penekanan tombol
%hara%ter berisi karakter yang kita masukkan le#at keyboard setelah diolah oleh sistem operasi.
Misalnya jika kita menekan tombol La> maka %hara%ter berisi CaC. ika tombol LShift> dan La>
ditekan$ maka %hara%ter berisi C%C. ika tombol L+trl> dan La> ditekan$ maka %hara%ter akan diisi
karakter yang bersesuaian dengan +trlMa$ yaitu karakter dengan kode Uni'ode CDu000-C &atau S83(.
Beberapa tombol seperti ;nter$ Ba'kspa'e$ Tab$ memiliki kode karakter Uni'ode tersendiri. SWT juga
memiliki konstanta untuk me#akili tombol.tombol ini$ yaitu
;onstanta c5a$acte$ Pen1elasan
SWT.BS Tombol ba'kspa'e
SWT.+) Tombol ;nter
SWT.,;* Tombol ,el
SWT.;S+ Tombol ;s'
SWT.*@ Tombol *@
SWT.T%B Tombol Tab
7eyCo1e berisi karakter yang tidak bisa di#akilkan dengan karakter Uni'ode$ misalnya tombol L@->$
tombol L5gUp>$ tombol L5anah %tas>$ dan lain.lain termasuk tombol angka pada keypad dan tombol
LM> L.> LN> pada keypad. Beberapa tombol tersebut dilambangkan dalam konstanta sebagai berikut.
Khusus untuk keypad$ apabila tombol LM> ditekan$ maka selain 7eyCo1e berisi
SWT.K;75%,,I%,,$ %hara%ter juga berisi CMC.
SWT.@- SWT.@-- SWT.5%G;I,8W6
SWT.K;75%,I
0
SWT.K;75%,I;OU%
*
SWT.@1 SWT.@-1 SWT.38M;
SWT.K;75%,I
-
SWT.K;75%,I+)
SWT.@G SWT.@-G SWT.;6,
SWT.K;75%,I
1
SWT.3;*5
SWT.@/ SWT.@-/ SWT.I6S;)T
SWT.K;75%,I
G
SWT.+%5SI*8+K
SWT.@2 SWT.@-2
SWT.K;75%,IMU*TI5*
7
SWT.K;75%,I
/
SWT.6UMI*8+K
SWT.@P SWT.%))8WIU5 SWT.K;75%,I%,,
SWT.K;75%,I
2
SWT.S+)8**I*8+K
SWT.@Q
SWT.%))8WI,8W
6
SWT.K;75%,ISUBT)%
+T
SWT.K;75%,I
P
SWT.5%US;
SWT.@R SWT.%))8WI*;@T
SWT.K;75%,I,;+IM%
*
SWT.K;75%,I
Q
SWT.B);%K
SWT.@S
SWT.%))8WI)IG3
T
SWT.K;75%,I,I4I,;
SWT.K;75%,I
R
SWT.5)I6TIS+);;6
SWT.@-0SWT.5%G;IU5 SWT.K;75%,I0
SWT.K;75%,I
S
state>as7 berisi tombol sebelum tombol ditekan$ yang biasanya L+trl>$ LShift>$ L%lt>$
L+ommand>. 5ada kebanyakan keyboard hanya ada G tombol pertama$ akan tetapi ada juga yang
memiliki lebih dari G tombol. Tombol.tombol ini disebut tombol pengubah.
SWT membuat tombol.tombol ini menjadi kode seperti
stateMask Pen1elasan
SWT.M8,-
Tombol pengubah pertama ditekan &biasanya SWT.+86T)8* pada
Windo#s atau SWT.+8MM%6, pada Ma'intosh(
SWT.M8,1 Tombol pengubah kedua ditekan &biasanya SWT.S3I@T(
SWT.M8,G Tombol pengubah ketiga ditekan &biasanya SWT.%*T(
SWT.M8,/ Tombol pengubah keempat ditekan &biasanya 0(
SWT.M8,I@I;)IM%SK Gabungan dari keempatnya &menggunakan bit#ise 8)(
,engan representasi seperti ini$ maka SWT bisa dijalankan pada beberapa platform$ dan tidak
bergantung dengan tombol apa yang ada pada suatu sistem operasi. Bayangkan jika %nda ingin
menggunakan L+ontrol> M Lb> untuk membuat karakter menjadi tebal$ akan tetapi tombol L+ontrol>
tidak tersedia pada Ma'intosh.
Untuk menguji tombol pengubah mana yang ditekan$ kita bisa menggunakan bit#ise %6,$ misalnya
(e.state>as7 A SWT.S!?CT).
Berikut ini adalah 'ontoh program pela'ak keyboard yang akan melaporkan tombol apa yang %nda
tekan dan lepaskan. +ontoh program ini dapat %nda unduh di sini untuk mengimportnya ke dalam
;'lipse. alankan program ini pada ;'lipse$ kemudian ketik apa saja di program %nda$ perhatikan
9+onsole9 di ;'lipse akan penuh dengan berbagai laporan tentang tombol yang ditekan dan dilepaskan.
Kadang kala dalam kondisi yang sangat langka$ kita harus mengolah sendiri tombol kita sebelum
diolah oleh suatu #udget. Karena SWT menggunakan #idget ba#aan sistem operasi$ pengolahan
tombol terjadi di le!el sistem operasi. Misalnya$ ketika user mengetik pada #idget teks$ listener
SWT.Key,o#n akan dijalankan$ kemudian sistem operasi akan memasukkan karakter dan
menggambarnya kembali dijalankan oleh sistem operasi. ,engan menggunakan 1oit$ kita bisa
membuang karakter tersebut untuk tidak meneruskannya ke sistem operasi.
+ontoh berikut akan menghalangi user untuk memasukkan karakter pada #idget teks dengan mengeset
1oit menjadi false setiap kali e!ent SWT.Key,o#n terjadi.
package %om.lyra%%.penghalangtombol2

import org.e%lipse.s&t.=2
import org.e%lipse.s&t.&i1gets.=2

public class PenghalangTombol 9

/**
* @param args
*/
public static void main(String:; args) 9
Display 1isplay = new Display()2
Shell shell = new Shell(1isplay)2
Te)t te)t = new Te)t(shell, SWT.S?4G3$ | SWT.B"#D$#)2

te)t.a113istener(SWT.GeyDo&n, new 3istener() 9
public void han1le$/ent($/ent e/ent) 9
e/ent.1oit = false2
<
<)2

te)t.pa%7()2
shell.pa%7()2

shell.open()2
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
1isplay.1ispose()2
<
<
T$a/e$sal
Tra!ersal atau penelusuran berarti memindahkan fokus dari satu kontrol ke kontrol lain. Tombol
tra!ersal berbeda dengan tombol akselerasi dan tombol sistem jendela &yang akan dibahas nanti($
yaitu : Suatu kontrol bebas memilih apakah akan menjalankan operasi tra!ersal atau mengolah tombol
yang ditekan. ika kontrol memilih untuk menjalankan operasi tra!ersal maka tombol tersebut tidak
akan diproses lebih lanjut.
%da dua jenis tra!ersal$ yaitu mnemonik dan tab.
T$a/e$sal Mnemonik
Mnemonik biasanya tertulis sebagai karakter yang diberi garis ba#ah pada label suatu #idget. Suatu
aksi akan dilakukan jika user menekan kombinasi tombol yang 'o'ok dengan mnemonik tersebut$
biasanya dengan menekan tombol L%lt> bersamaan dengan karakter yang digaris ba#ah tersebut.
Gambar berikut adalah 'ontoh mnemonik pada program 8pen8ffi'e ketika kita membuka kotak dialog
@ormat @ont
ika kita menekan L%lt> M 3 maka tampilan 3elp akan ditampilkan.
Menekan tombol kombinasi untuk memanggil mnemonik sama dengan mengaktifkan #idget tersebut.
5ada 'ontoh di atas$ mnemonik L%lt> M 3 diterapkan pada tombol$ yang artinya ketika kita menekan
L%lt> M 3$ sama dengan kita menekan tombol 3elp. Beberapa #idget yang tidak bisa menerima
pilihan$ seperti label dan kotak grup masih bisa menerima mnemonik$ akan tetapi fungsinya hanya
untuk memindahkan fokus ke #idget tersebut.
Bagaimana 'aranya menambahkan mnemonik" Mudah saja. +ukup tambahkan CTC di depan karakter
yang akan kita tandai sebagai mnemonik$ kemudian masukkan string ini sebagai argumen pada metode
setTe)t() suatu #idget. Misalnya pada perintah berikut :
Button tombol. = new Button(shell, SWT.PS!)2
tombol..setTe)t(5AGli7 saya5)2
akan membuat tombol dengan mnemonik L%lt> M K$ seperti pada gambar berikut ini :
Untuk membuat mnemonik pada karakter CTC sendiri$ gunakan CTTC$ misalnya 9Ini TT Itu9 akan
menghasilkan 9Ini T Itu9
T$a/e$sal Tab
Tra!ersal tab didukung pada semua platform. Tidak seperti pada mnemonik$ pada tra!ersal tab$ kita
tidak perlu mendefinisikan apa.apa$ karena setiap platform memiliki 'ara sendiri bagaimana
memindahkan fokus dari satu #idget ke #idget lain. Misalnya$ ketika kita menekan tombol LTab>$
maka fokus akan otomatis pindah ke #idget berikutnya. Ketika sampai pada #idget terakhir$ maka
fokus akan diulang dari #idget pertama.
6ama tra!ersal tab mungkin agak sedikit salah sasaran$ karena sepertinya hanya tombol LTab> saja
yang bisa digunakan untuk memindahkan fokus dari satu #idget ke #idget lain. 5ada beberapa
platform$ menekan tombol panah juga memindahkan fokus.
Beberapa tombol lain seperti L;s'> digunakan untuk menutup kotak dialog$ dan sebenarnya termasuk
dalam tombol tra!ersal tab juga.
Berikut ini adalah daftar e!ent dan listener yang berkaitan dengan tra!ersal.
;elas E/ent
>e/ent be$tipe?
Inte$@ace2;elas
8istene$ >listene$
be$tipe?
Metode >listene$ be$tipe?
7enis e/ent
>e/ent tanpa
tipe(
Pen1elasan
Tra!erse;!ent Tra!erse*istener keyTra!ersed&Tra!erse;!ent( SWT.Tra!erse
6a!igasi pada
keyboard
dideteksi
Berikut ini adalah isi e!ent ketika e!ent tra!ersal terjadi.
6ama 4ield Pen1elasan
detail ,etail tra!ersal yang terjadi
doit Suatu boolean yang bisa digunakan untuk membatalkan aksi tra!ersal
1etail berisi salah satu dari nilai.nilai berikut.
isi 1etail Pen1elasan
SWT.T)%4;)S;I;S+%5;
Tra!ersal yang terjadi ditutupnya suatu kotak dialog$
misalnya dengan menekan tombol +an'el atau tombol
L;s'>
SWT.T)%4;)S;I);TU)6
Tra!ersal yang terjadi ketika kotak dialog selesai diisi
misalnya setelah menekan tombol 8K atau tombol L;nter>
SWT.T)%4;)S;IT%BI5);4I8US
Tra!ersal yang terjadi ketika fokus pindah ke group tab
sebelumnya
SWT.T)%4;)S;IT%BI6;FT
Tra!ersal yang terjadi ketika fokus pindah ke group tab
sesudahnya
SWT.T)%4;)S;I%))8WI5);4I8US
Tra!ersal yang terjadi ketika fokus pindah ke item
sebelumnya
SWT.T)%4;)S;I%))8WI6;FT
Tra!ersal yang terjadi ketika fokus pindah ke item
sesudahnya
SWT.T)%4;)S;IM6;M86I+ Tra!ersal mnemonik terjadi
SWT.T)%4;)S;I5%G;I5);4I8US
Tra!ersal yang terjadi ketika untuk pindah ke halaman
sebelumnya pada kotak dialog
SWT.T)%4;)S;I5%G;I6;FT
Tra!ersal yang terjadi ketika untuk pindah ke halaman
berikutnya pada kotak dialog
SWT.T)%4;)S;I686; Tra!ersal tidak terjadi
4ariabel 1etail bukan hanya untuk diba'a akan tetapi kita juga bisa mengisinya apabila kita ingin
mengubah jenis tra!ersal. Misalnya kita ingin mengubah tombol L;nter> bukan untuk menutup dialog
akan tetapi untuk memindahkan fokus ke #idget lain$ kita bisa mengisi !ariabel detail dengan
SWT.T#8@$#S$,8##"W,P#$@?"S.
1oit digunakan untuk membatalkan tra!ersal jika !ariabel ini diisi false. %kan tetapi lihat bah#a pada
!ariabel 1etail juga bisa SWT.T#8@$#S$,4"4$. %pa perbedaannya" Ingat bah#a tombol yang tidak
digunakan untuk tra!ersal akan diberikan kepada #idget yang menerima tra!ersal untuk diolah lebih
lanjut.
%rtinya jika e!ent 1oit kita isi dengan true$ tra!ersal akan dilakukan dan tombol akan 9dikonsumsi9
&tidak diberikan kepada #idget untuk diproses kembali(. ika 1oit kita isi denga false$ tra!ersal tidak
dilakukan dan tombol akan diberikan kepada #idget untuk diproses.
%pa yang terjadi jika 1etail juga diisi dengan SWT.T#8@$#S$,4"4$" ika 1etail diisi dengan
SWT.T#8@$#S$,4"4$ maka #idget tidak akan melakukan tra!ersal$ tidak peduli apakah isi 1oit berisi
true atau false. %kan tetapi$ !ariabel 1oit menentukan apakah tombol akan diberikan kepada #idget
untuk diproses.
adi jika 1oit berisi false dan 1etail berisi SWT.T#8@$#S$,4"4$$ maka tombol akan diberikan
kepada #idget$ dan tra!ersal tidak dilakukan. %kan tetapi jika 1oit berisi true dan 1etail berisi
SWT.T#8@$#S$,4"4$$ maka tra!ersal tidak dilakukan$ dan tombol akan dikonsumsi dan tidak akan
diberikan kepada #idget.
Berikut ini adalah 'ontoh penggunaan tra!ersal.
5rogram ini akan membuat P tombol. +oba tekan tombol LTab>. @okus akan pindah ke tombol
berikutnya setiap kali %nda menekan tombol LTab>. Ketika %nda mele#ati tombol / atau tombol P$
akan ter'etak 9Button U/V ditelusuri9. ika %nda menekan tombol LShift> M LTab> fokus akan
berpindah ke tombol sebelumnya. %kan tetapi jika %nda sampai pada tombol / atau tombol P$ e!ent
tra!ersal yang terjadi akan ditangkap dan tra!ersal akan diabaikan. %kibatnya %nda tidak akan bisa
pindah dari tombol / ke tombol G atau tombol P ke tombol 2. 5ada saat yang sama di konsol akan
ter'etak 9%nda tidak bisa kembaliE9.
package %om.lyra%%.tra/ersal7ustom2

import org.e%lipse.s&t.=2
import org.e%lipse.s&t.&i1gets.=2
import org.e%lipse.s&t.e/ents.=2

public class Tra/ersalGustom 9
/**
* @param args
*/
public static void main(String:; args) 9
Display 1isplay = new Display()2
Shell shell = new Shell(1isplay)2
shell.setSiJe('BB, (BB)2

Button b. = new Button(shell, SWT.PS!)2
Button b( = new Button(shell, SWT.PS!)2
Button b' = new Button(shell, SWT.PS!)2
Button b- = new Button(shell, SWT.PS!)2
Button bK = new Button(shell, SWT.PS!)2
Button b+ = new Button(shell, SWT.PS!)2
b..setBoun1s(.B,.B,KB,KB)2
b(.setBoun1s(.BB,.B,KB,KB)2
b'.setBoun1s((BB,.B,KB,KB)2
b-.setBoun1s(.B,.BB,KB,KB)2
bK.setBoun1s(.BB,.BB,KB,KB)2
b+.setBoun1s((BB,.BB,KB,KB)2
b..setTe)t(5.5)2
b(.setTe)t(5(5)2
b'.setTe)t(5'5)2
b-.setTe)t(5-5)2
bK.setTe)t(5K5)2
b+.setTe)t(5+5)2

Tra/erse3istener tra/erse3istener = new Tra/erse3istener() 9
public void 7eyTra/erse1(Tra/erse$/ent e) 9
if (e.1etail == SWT.T#8@$#S$,T8B,P#$@?"S) 9
System.out.println(58n1a ti1a7 bisa 7embali65)2
e.1oit = false2
<
System.out.println(e.&i1get I 5 1itelusuri5)2
<
<2
b-.a11Tra/erse3istener(tra/erse3istener)2
b+.a11Tra/erse3istener(tra/erse3istener)2

shell.open()2
while (6shell.isDispose1())
if (61isplay.rea18n1Dispat%h())
1isplay.sleep()2
1isplay.1ispose()2
<
<
Tombol Aksele$ato$ dan Tombol Sistem 7endela
Tombol Aksele$ato$
%kselerator adalah tombol short'ut ke salah satu menu$ misalnya pada kebanyakan program pengolah
kata menekan tombol L+trl> dan S artinya menyimpan teks yang sedang diedit. %kselerator biasanya
berupa rangkaian tombol yang ditekan bersamaan$ bisa 1 tombol seperti 'ontoh L+trl> di atas atau
mungkin lebih$ misalnya pada @irefo<$ tombol L+trl> M LShift> M membuka konsol kesalahan &error
'onsole(.
%kselerator selalu berhubungan dengan menu$ sehingga akselerator bersifat global$ yang berarti kita
bisa menekan tombol akselerator dari dalam #idget manapun yang sedang aktif pada saat itu. Ketika
akselerator dipanggil$ maka tombol.tombol yang ditekan akan dikonsumsi langsung oleh aplikasi dan
tidak diberikan kepada #idget apa.apa.
%kselerator direpresentasikan pada SWT dalam bentuk kode integer tertentu. Kode integer tersebut
berisi gabungan beberapa tombol$ yaitu tombol pengubah &seperti L+trl>$ LShift>$ L%lt>( dan satu
tombol lain yang berupa karakter atau key+ode &seperti tanda panah$ @- hingga @-2$ L;s'>$ dll(. *ihat
bahasan tentang fokus kontrol untuk mengerti lebih jauh tentang bagaimana penanganan tombol pada
SWT. Tombol akselerator tidak bisa hanya terdiri dari tombol pengubah saja.
Berikut ini adalah beberapa 'ontoh akselerator.
Aksele$ato$ 9angkaian Tombol
SWT.+86T)8* M C%C L+trl> M L%>
SWT.S3I@T M SWT.%))8WIU5 LShift> M tombol panah ke atas
SWT.M8,- M CSC
Tombol pengubah pertama &biasanya L+trl> atau L+ommand>( M
LS>
SWT.M8,- M SWT.M8,1 M CBC Tombol pengubah pertama M Tombol pengubah kedua M LB>
%kselerator diberikan kepada menu atau toolbar dengan menggunakan metode set8%%elerator(int
7o1e87selerator) di mana 7o1e87selerator adalah kode akselerator seperti di'ontohkan pada tabel
di atas. Untuk mereset akselerator$ isi 7o1e87selerator dengan 0.
Untuk mengambil tombol akselerator suatu menu atau toolbar bisa digunakan dengan menggunakan
metode get8%%elerator() yang mengembalikan nilai integer.
Misalnya jika item adalah suatu item pada menu$ maka potongan kode berikut akan menambahkan
akselerator pada item tersebut :
item.setTe)t(5Pilih ASemua\tCtrlIS5)2
item.set8%%elerator(SWT.>"D. I LSL)2
item.a113istener(SWT.Sele%tion, new 3istener() 9
public void han1le$/ent($/ent e) 9
System.out.println(5?tem 1ipilih.5)2
<
<)2
Karakter CDtC di dalam setTe)t memberi tahu SWT bah#a karakter setelah itu adalah tombol
akseleratornya. 5erlu di'atat bah#a hanya menambahkan teks akselerator pada metode setTe)t()
tidak membuat tombol akselerator otomatis ditambahkan dalam metode set8%%elerator().
Menambahkan teks akselerator pada setTe)t() berfungsi untuk membetulkan kesalahan yang terjadi
jika tombol akselerator tidak terdapat pada platform yang dituju. Misalnya pada 'ontoh di atas$ tombol
L+trl> tidak ada pada Ma'intosh$ akan tetapi SWT akan mengganti tampilan +trl.S menjadi .S.
Tombol Sistem 7endela
Tombol yang diproses oleh sistem jendela tidak akan sampai pada aplikasi kita. Misalnya$ tombol %lt.
@/ pada beberapa sistem akan menutup jendela yang aktid. Manager jendela akan melakukan aksi
terlebih dahulu dan tombol tersebut akan dikonsumsi oleh manager jendela. Manager jendela tidak
sama dengan sistem operasi. 5ada Windo#s$ manager jendela itu terintegrasi dengan sistem operasi.
5ada *inu< misalnya manager jendela bisa berma'am.ma'am$ misalnya K,; dan Gnome.
Tombol.tombol mana yang akan dimanage oleh manager jendela berbeda.beda$ tergantung dari sistem
jendela tersebut. Karena tidak adanya kesamaan pada setiap manager jendela$ maka kita tidak bisa
men'egat penekenan tombol ini misalnya dialihkan untuk melakukan fungsi lain.

LE.. Wpage U margin: 0.QSin V T, 5 U margin.bottom: 0in V 5 U margin.bottom: 0.0Rin V ..>

Anda mungkin juga menyukai