Semua sistem operasi di mana SWT diimplementasikan mendukung perangkat tunjuk. Biasanya berbentuk mouse, akan tetapi bisa jadi berupa trackball, trackpad, atau jenis perangkat keras lainnya. Pada komputer genggam, perangkat tunjuk bisa jadi berupa stylus. Untuk mempermudah pembahasan, kita akan gunakan mouse sebagai perangkat tunjuk, tidak peduli bagaimana perangkat aslinya.
Posisi suatu mouse biasanya digambarkan dalam bentuk ikon kecil pada layar yang disebut kursor. Hal ini berlaku untuk semua platform, kecuali pada Windows CE, karena perangkat Windows CE biasanya berupa perangkat tunjuk "langsung", seperti stylys, yang tidak membutuhkan kursor.
Mouse biasanya memiliki tiga tombol (kecuali pada Macintosh yang hanya memiliki satu tombol, walaupun sebenarnya mouse lebih dari 1 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. Perilaku "drag-and-drop" mouse kurang lebih sangat bergantung pada platformnya.
Ketika kita menggeser mouse, kursor akan berbah bentuk, tergantung dari kontrol apa di bawahnya. Misalnya, widget teks akan mengubah tampilan kursor seperti huruf I untuk menunjukkan bahwa user bisa mengetikkan sesuatu pada widget tersebut. Di dalam kursor, ada titik pusat yang menunjukkan koordinat x dan y suatu mouse ketika event pada mouse terjadi.
Event pada Mouse
Ketika tombol mouse ditekan atau mouse digerakkan, event mouse dibuat dan akan diberikan kepada widget yang ada di bawahnya. Akan tetapi ketika tombol mouse ditekan dan ditahan (terus ditekan), dan mouse berada di luar widget (mungkin ada di widget lain atau pada aplikasi lain di desktop), eventnya akan diberikan kepada widget awal di mana mouse tersebut ditekan. Pengalihan event sementara ini disebut pengambilan mouse. Widget yang menerima event disebut widget pengambil. Pengambilan mouse terhadi secara otomatis pada SWT. (Ini mungkin bukan sesuatu masalah, akan tetapi sebagai informasi saja kepada Anda).
Tabel - Isi Event Mouse ketika suatu tombol mouse ditekan, dilepaskan atau mouse digeser
Nama Field | Penjelasan |
button | Tombol yang ditekan atau dilepaskan |
x | Koordinat x ketika event terjadi |
y | Koordinat y ketika event terjadi |
stateMask | Bit mask yang menyatakan kondisi keyboard dan mouse sebelum event terjadi |
Ketika mouse ditekan atau dilepas, field bernama "button" akan diisi oleh tombol mana yang ditekan. Tombol mouse diberi nomor dari kiri ke kanan yang dimulai dari 1. Untuk user kidal (dan mengkonfigurasi sistem operasi untuk orang kidal), penomoran tombol tetap sama, akan tetapi dimulai dari kanan ke kiri. Pemetaan tombol untuk orang kidal ini tidak tampak oleh SWT dan aplikasi kita, karena dilakukan secara otomatis oleh sistem operasi.
Ketika terjadi event pada mouse, koordinat x dan y-nya juga dilaporkan dalam event. Koordinat yang dilaporkan adalah koordinat relatif widget ketika event tersebut dibuat (bukan koordinat global layar atau aplikasi kita). Karena user mungkin telah memindahkan mouse setelah menekan tombol, maka lokasi sebenarnya ketika event ini ditangani mungkin berbeda dengan ketika event dibuat. Hal ini untuk menghindari program kita untuk bertindak terlalu sensitif terhadap pergerakan mouse. (Jika kita membutuhkan lokasi yang aktual pada saat-saat tertentu, kita bisa menggunakan metode getCursorLocation() yang dimiliki oleh kelas Display.)
Event pada mouse juga menggunakan field lain yang dinamakan stateMask untuk menunjukkan keadaan mouse. Seperti pada penanda tombol, stateMask berisi keadaan mouse sebelum terjadinya suatu event. Misalnya, jika tidak ada tombol mouse yang ditekan atau tombol keyboard lain yang ditekan ketika tombol kiri mouse ditekan, maka event mouse akan diisi dengan buttonbernilai 1 dan stateMask bernilai 0. stateMask tidak berisi "tombol 1". Akan tetapi ketika terjadi event lain ketika mouse kiri sedang ditekan, maka stateMask akan berisi 1.
Keadaan suatu mouse dilambangkan oleh konstanta pada kelas SWT, seperti pada tabel berikut :
stateMask | Penjelasan |
SWT.BUTTON1 | Tombol 1 ditekan |
SWT.BUTTON2 | Tombol 2 ditekan |
SWT.BUTTON3 | Tombol 3 ditekan |
SWT.BUTTON_MASK | Bitwise-OR dari tombol-tombol yang ditekan |
Kelas Event (event bertipe) | Interface/Kelas Listener(listener bertipe) | Metode (listener bertipe) | Jenis event (event tanpa tipe) | Penjelasan |
MouseEvent | MouseListener (dan MouseAdapter) |
mouseDoubleClick(MouseEvent)
|
SWT.MouseDoubleClick
| Mouse di-double click |
mouseDown(MouseEvent) | SWT.MouseDown | Tombol mouse ditekan | ||
mouseUp(MouseEvent) | SWT.MouseUp | Tombol mouse dilepaskan | ||
MouseEvent | MouseMoveListener | mouseMove(MouseEvent) | SWT.MouseMove | Mouse berpindah posisi |
MouseEvent | MouseTrackListener (dan MouseTrackAdapter) |
mouseEnter(MouseEvent)
|
SWT.MouseEnter
| Mouse masuk ke wilayah klien |
mouseExit(MouseEvent) |
SWT.MouseExit
| Mouse berada di sekitar klien | ||
mouseHover(MouseEvent)
|
SWT.MouseHover
| Mouse keluar dari wilayah klien |
package net.lyracc.pelacakmouse; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; public class PelacakMouse { /** * @param args */ public static void main(String[] args) { // Membuat display dan shell baru Display display = new Display(); Shell shell = new Shell(display); // Kelas Listener baru, menggunakan listener tanpa tipe Listener mouseListener = new Listener() { // metode handleEvent pada interface Listener harus diimplementasikan public void handleEvent(Event e) { String output = "UNKNOWN"; switch (e.type) { case SWT.MouseDown: output = "DOWN"; break; case SWT.MouseUp: output = "UP"; break; case SWT.MouseMove: output = "MOVE"; break; case SWT.MouseDoubleClick: output = "DOUBLE"; break; case SWT.MouseEnter: output="ENTER"; break; case SWT.MouseExit: output = "EXIT"; break; case SWT.MouseHover: output="HOVER"; break; } // Mengambil stateMask pada event, kemudian menampilkannya // dalam bentuk heksadesimal output += ": stateMask=0x" + Integer.toHexString(e.stateMask); // Jika tombol Ctrl ditekan, tambahkan CTRL pada keluarannya if ((e.stateMask & SWT.CTRL) != 0) output += " CTRL"; // Jika tombol Alt ditekan, tambahkan ALT pada keluarannya if ((e.stateMask & SWT.ALT) != 0) output += " ALT"; // Jika tombol Shift ditekan, tambahkan SHIFT pada keluarannya if ((e.stateMask & SWT.SHIFT) != 0) output += " SHIFT"; // Jika tombol Command ditekan, tambahkan COMMAND pada keluarannya if ((e.stateMask & SWT.COMMAND) != 0) output += " COMMAND"; // Jika tombol kiri mouse ditekan, tambahkan BUTTON1 pada keluarannya if ((e.stateMask & SWT.BUTTON1) != 0) output += " BUTTON1"; // Jika tombol tengah mouse ditekan, tambahkan BUTTON2 pada keluarannya if ((e.stateMask & SWT.BUTTON2) != 0) output += " BUTTON2"; // Jika tombol kanan mouse ditekan, tambahkan BUTTON3 pada keluarannya if ((e.stateMask & SWT.BUTTON3) != 0) output += " BUTTON3"; // Mengambil field button pada event, kemudian menampilkannya // dalam bentuk heksadesimal output += ", button=0x" + Integer.toHexString(e.button); // Mengambil koordinat x dan y output += ", x=" + e.x + ", y=" + e.y; // Menampilkan pesan keluaran pada konsol System.out.println(output); } }; // Tambahkan listener pada setiap event yang ingin kita pantau shell.addListener(SWT.MouseDown, mouseListener); shell.addListener(SWT.MouseUp, mouseListener); shell.addListener(SWT.MouseMove, mouseListener); shell.addListener(SWT.MouseDoubleClick, mouseListener); shell.addListener(SWT.MouseEnter, mouseListener); shell.addListener(SWT.MouseExit, mouseListener); shell.addListener(SWT.MouseHover, mouseListener); // Ubah ukuran jendela menjadi 200 x 200 piksel shell.setSize(200, 200); // Perintah "standar" SWT, harus ada pada setiap aplikasi SWT shell.open(); while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep(); display.dispose(); } }
Program di atas akan melacak aktivitas mouse kemudian menampilkannya pada konsol. Jangan lupa untuk menambahkan pustaka SWT sebelum menjalankan program ini seperti dibahas pada bagian ini.
Klik Run pada Eclipse dan jalankan sebagai Java Application. Setelah jendela aplikasi yang kita buat keluar, coba jalankan mouse dan perhatikan "Console" pada Eclipse seperti gambar berikut.
Tidak ada komentar:
Posting Komentar