Event
Event adalah inti dari pemrograman GUI.
GUI program tidak memiliki alur apa yang akan terjadi ketika program
dijalankan, dalam arti langkah per langkah dari awal hingga akhir. Akan
tetapi, program harus bisa bereaksi akan berbagai event (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.
Dalam
Java, event dilambangkan oleh objek. Ketika suatu event terjadi, sistem
akan mengumpulkan informasi yang sesuai dengan even tersebut, kemudian
membuat objek yang berisi informasi ini. Jenis even berbeda dilambangkan
oleh objek dengan kelas yang berbeda pula. Setelah objek event dibuat,
ia akan diberikan sebagai parameter pada subrutin yang ditugaskan untuk
menangani event tersebut. Dengan menulis subrutin ini, programmer bisa
memberi tahu apa yang harus dilakukan jika mouse diklik atau keyboard
ditekan, misalnya.
Sebagai programmer Java, kita hanya melihat
even dari sisi yang lebih umum. Banyak sekali hal yang terjadi antara
tombol ditekan hingga subrutin yang kita buat melakukan tugasnya. Secara
garis besar, dalam metode main()
kita harus menuliskan perulangan dalam bentuk seperti :
ketika program masih berjalan:
Tunggu hingga even berikutnya terjadi
Panggil subrutin untuk menangai event tersebut
main()
kita dalam bentuk while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep();
Event tanpa tipe diwakili oleh kelas
Event
.
Kelas ini menyimpan informasi yang berbeda-beda tergantung dari jenis.
Akan tetapi secara umum semua event jenis apapun memiliki informasi
berikut :Informasi | Penjelasan |
display | Display di mana event ini terjadi |
widget | Widget di mana event ini terjadi |
type | Jenis event yang terjadi |
Jenis Event | Penjelasan |
SWT.KeyDown | Tombol ditekan |
SWT.KeyUp | Tombol dilepaskan |
SWT.MouseDown | Tombol mouse ditekan |
SWT.MouseUp | Tombol mouse dilepaskan |
SWT.MouseMove | Mouse berpindah posisi |
SWT.MouseEnter | Mouse masuk ke wilayah klien |
SWT.MouseHover | Mouse berada di sekitar klien |
SWT.MouseExit | Mouse keluar dari wilayah klien |
SWT.MouseDoubleClick | Mouse di-double click |
SWT.Paint | Suatu widget diberi perintah untuk menggambar dirinya |
SWT.Move | Posisi suatu widget berubah |
SWT.Resize | Ukuran widget berubah |
SWT.Dispose | Widget dihapus |
SWT.Selection | Suatu aksi pemilihan dilakukan dalam widget (misalnya memilih item pada drop down list |
SWT.DefaultSelection | Ada pilihan awal pada suatu widget |
SWT.FocusIn | Widget menerima fokus dari keyboard |
SWT.FocusOut | Widget kehilangan fokus dari keyboard |
SWT.Expand | Item pada pohon dikembangkan |
SWT.Collapse | Item pada pohon ditutup |
SWT.Iconify | Jendela Shell diminimasi |
SWT.Deiconify | Jendela Shell dibuka (restore) |
SWT.Close | Jendela Shell ditutup (dengan tombol X) |
SWT.Show | Widget bisa dilihat |
SWT.Hide | Widget disembunyikan |
SWT.Modify | Teks berubah pada suatu kontrol |
SWT.Verify | Input teks sedang diverifikasi |
SWT.Activate | Widget sedang diaktifkan |
SWT.Deactivate | Widget dimatikan |
SWT.Help | User meminta pertolongan tentang suatu widget |
SWT.DragDetect | Aksi drag-and-drop dideteksi |
SWT.MenuDetect | User menekan tombol kik kanan untuk mengaktifkan menu konteks |
SWT.Arm | Item pada menu digambarkan |
SWT.Traverse | Navigasi pada keyboard dideteksi |
SWT.HardKeyDown | Tombol pada hardware ditekan (untuk perangkat genggam) |
SWT.HardKeyUp | Tombol pada hardware dilepas (untuk perangkat genggam) |
org.eclipse.swt.events
Tabel berikut menggambarkan perbandingan antara event bertipe dan jenis event dari event tanpa tipe.
Event Bertipe | Jenis Event Tanpa Tipe |
ArmEvent | SWT.Arm |
ControlEvent | SWT.Move SWT.Resize |
DisposeEvent | SWT.Dispose |
FocusEvent | SWT.FocusIn SWT.FocusOut |
HelpEvent | SWT.Help |
KeyEvent | SWT.KeyDown SWT.KeyUp |
MenuEvent | SWT.Hide SWT.Show |
ModifyEvent | SWT.Modify |
MouseEvent | SWT.MouseDoubleClick SWT.MouseDown SWT.MouseUp |
MouseEvent | SWT.MouseMove |
MouseEvent | SWT.MouseEnter SWT.MouseExit SWT.MouseHover |
PaintEvent | SWT.Paint |
SelectionEvent | SWT.DefaultSelection SWT.Selection |
ShellEvent | SWT.Activate SWT.Close SWT.Deactivate SWT.Iconify SWT.Deiconify |
TraverseEvent | SWT.Traverse |
TreeEvent | SWT.Collapse SWT.Expand |
VerifyEvent | SWT.Verify |
Listener
Supaya suatu event berarti, suatu program harus bisa mendeteksi event dan bereaksi akan event tersebut. Untuk mendeteksi suatu event, suatu program harus mendengarkannya. Mendengarkan event ini dilakukan oleh objek yang berna,a pendengar event (event listener). Objek listener harus memiliki metode instansi untuk menangani event yang didengarkannya. Bentuknya bervariasi tergantung dari jenis event yang ditanganinya.
Ada beberapa hal detail yang harus diingat untuk bisa bekerja dengan event. Beberapa langkah yang harus diingat :
1. Menambahkan import paket yang dibutuhkan, misalnya "org.eclipse.swt.events"
2. Mendeklarasikan kelas yang mengimplementasikan interface suatu listener
3. Menambahkan aksi yang dilakukan oleh kelas baru tersebut. Aksi ini adalah aksi yang dilakukan untuk menangani suatu event
4. Mendaftarkan event tersebut ke komponen yang mungkin memberikan event.
Objek apapun bisa bertindah sebagai event listener asalkan ia mengimplementasikan interface yang tepat. Suatu komponen dapat mendengarkan event yang dihasilkannya sendiri. Suatu kelas dapat dibuat secara khusus hanya untuk mendengarkan suatu event. Kebanyakan orang menganggap lebih mudah untuk menggunakan kelas bertingkat anonim untuk mendengarkan suatu objek. (Kelas bertingkat anonim telah dibahas sebelumnya di sini).
Seperti hanya Event, SWT memiliki dua jenis listener : tanpa tipe dan bertipe. Masing-masing digunakan untuk menangani event tanpa tipe dan event bertipe.
Listener Tanpa Tipe (untuk menangani event tanpa tipe)
nterface generik yang digunakan untuk menangai event tanpa tipe dinamakan
Listener
. Listener tanpa tipe dapat ditambahkan pada suatu widget dengan menggunakan metode addListener()
.Metode
addListener()
memiliki bentuk sepertiaddListener(int jenisEvent, Listener listener)
listener
ke dalam koleksi listener yang akan dipanggil ketika event tipe
tertentu terjadi. Ketika suatu event terjadi, maka listener akan
dipanggil dengan menggunakan metode handleEvent()
.Contoh berikut mengilustrasikan bagaimana menambah suatu Listener ke dalam suatu widget, yang akan dipanggil ketika event SWT.Dispose terjadi.
widget.addListener(SWT.Dispose, new Listener() { public void handleEvent(Event event) { // widget was disposed } });
handleEvent()
harus diimplementasikan, di mana implementasinya adalah tugas yang harus dilakukan ketika widget dihapus.Jika beberapa listener ditambahkan, maka mereka akan dipanggil dengan urutan ketika mereka ditambahkan (first in first called). Artinya listener pertama diberi kesempatan untuk mengolah event (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 widget dengan menggunakan metode
removeListener()
. Bentuknya adalah sebagai berikutremoveListener(int jenisEvent, Listener listener)
Untuk
menghapus suatu listener, kita harus memberikan instansi yang persisi
sama ketika listener tersebut ditambahkan. JIka beberapa instansi
listener yang sama sudah ditambahkan sebelumnya, maka kita harus
menghapusnya berulang kali sejumlah ia ditambahkan. Secara umum,
menghapus suatu listener mungkin tidak diperlukan. Listener akan diambil
oleh pemulung memori ketika suatu widget 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
notifyListeners
, yang memiliki bentuk sepertinotifyListeners(int jenisEvent, Event event)
jenisEvent
adalah jenis event yang akan dilakukan, dan Event adalah objek yang
berisi event yang akan dilakukan. Hal penting yang harus dicatat adalah
memanggil metode notifyListeners()
tidak menyebabkan event akan benar-benar terjadi. Misalnya memanggil notifyListeners()
dengan jenis SWT.MouseDown
tidak akan menyebabkan tombol terlihat seperti ditekan. Dan juga memanggil notifyListeners()
tidak menjamin bahwa semua data pada event terinisialisasi seperti pada event sesungguhnya.Listener Bertipe (untuk menangani Event bertipe)
Karena event bertipe dibuat mengikuti pola listener pada JavaBeans, penggunaan listener bertipe sangat mirip dengan penggunaan listener pada AWT/Swing.
Misalnya untuk mendengarkan event ketika suatu widget dihapus, maka aplikasi bisa menggunakan
addDisposeListener()
, yang memiliki bentuk sepertiaddDisposeListener(DisposeListener listener)
widgetDisposed()
.widget.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent event) { // widget was disposed } });
DisposeListener
adalah suatu interface. Jika ada lebih dari satu metode yang
didefinisikan dalam listener, maka SWT akan secara otomatis menambahkan
kelas adapter yang berisi implementasi kosong dari metode-metode yang
didefinisikan pada interface tersebut. Misalnya interface SelectionListener
memiliki dua metode, yaitu widgetSelected()
dan widgetDefaultSelected
, yang keduanya mengambil argumen bertipe SelectionEvents
. Dalam hal ini kelas SelectionAdapter
tersedia untuk memberikan implementasi kosong untuk setiap metode.
Kelas adapter ini hanyalah sebagai kelas bantu yang sesuai dengan
konvensi pada listener JavaBeans.Listener bertipe bisa dihapus dengan menggunakan metode penghapus untuk setiap listner. Misalnya, listener untuk event ketika suatu widget dihapus bisa dibuang dengan menggunakan
removeDisposeListener()
, yang memiliki bentuk removeDisposeListener(DisposeListener listener)
listener
adalah objek listener yang akan dihapus dari koleksi listener yang dipanggil ketika widget dihapus.Tabel berikut merangkum event bertipe, nama interface listener yang menanganinya, serta metode pada interface tersebut, dibandingkan dengan listener tanpa tipe.
Event Bertipe | Interface Listener | Metode | Jenis Event Tanpa Tipe |
ArmEvent | ArmListener | widgetArmed(ArmEvent) | SWT.Arm |
ControlEvent | ControlListener (dan ControlAdapter) | controlMoved(ControlEvent) controlResized(ControlEvent) | SWT.Move SWT.Resize |
DisposeEvent | DisposeListener | widgetDisposed(DisposeEvent) | SWT.Dispose |
FocusEvent | FocusListener (dan FocusAdapter) | focusGained(FocusEvent) focusLost(FocusEvent) | SWT.FocusIn SWT.FocusOut |
HelpEvent | HelpListener | helpRequested(HelpEvent) | SWT.Help |
KeyEvent | KeyListener (dan KeyAdapter) | keyPressed(KeyEvent) keyReleased(keyEvent) | SWT.KeyDown SWT.KeyUp |
MenuEvent | MenuListener (dan MenuAdapter) | menuHidden(MenuEvent) menuShown(MenuEvent) | SWT.Hide SWT.Show |
ModifyEvent | ModifyListener | modifyText(ModifyEvent) | SWT.Modify |
MouseEvent | MouseListener (dan MouseAdapter) | mouseDoubleClick(MouseEvent) mouseDown(MouseEvent) mouseUp(MouseEvent) | SWT.MouseDoubleClick SWT.MouseDown SWT.MouseUp |
MouseEvent | MouseMoveListener | mouseMove(MouseEvent) | SWT.MouseMove |
MouseEvent | MouseTrackListener (dan MouseTrackAdapter) | mouseEnter(MouseEvent) mouseExit(MouseEvent) mouseHover(MouseEvent) | SWT.MouseEnter SWT.MouseExit SWT.MouseHover |
PaintEvent | PaintListener | paintControl(PaintEvent) | SWT.Paint |
SelectionEvent | SelectionListener (dan SelectionAdapter) | widgetDefaultSelected(SelectionEvent) widgetSelected(SelectionEvent) | SWT.DefaultSelection SWT.Selection |
ShellEvent | ShallListener (dan ShellAdapter) | shellActivated(ShellEvent) shellClosed(ShellEvent) shellDeactivated(ShellEvent) shellIconified(ShellEvent) shellDeiconified(ShellEvent) | SWT.Activate SWT.Close SWT.Deactivate SWT.Iconify SWT.Deiconify |
TraverseEvent | TraverseListener | keyTraversed(TraverseEvent) | SWT.Traverse |
TreeEvent | TreeListener (dan TreeAdapter) | treeCollapsed(TreeEvent) treeExpanded(TreeEvent) | SWT.Collapse SWT.Expand |
VerifyEvent | VerifyListener | verifyText(VerifyEvent) | SWT.Verify |
0 comments:
Post a Comment