Program GUI menggunakan fokus input untuk menentukan komponen mana yang yang harus menangani event dari keyboard. Pada suatu saat, hanya ada elemen pada layar yang bisa menerima input, yaitu di mana semua event 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. Contoh lainnya adalah misalnya dalam suatu formulir, input teks yang sedang dalam fokus memiliki warna latar belakang yang berbeda dengan input teks yang tidak memiliki fokus.
Untuk memberikan fokus kepada suatu komponen, kita bisa menggunakan metode setFocus() yang terdapat pada hampir semua widget. Jika kontrol adalah objek bertipe suatu widget yang bisa menerima fokus dan sukses adalah variabel bertipeboolean, maka
sukses = kontrol.setFocus();
memberi perintah kepada kontrol untuk mencoba mengambil fokus input. Jika kontrol atau salah satu komponen yang ditampungnya berhasil mengambil fokus, fungsi ini akan mengembalikan true. Jika gagal, maka false akan dikembalikan.
Widget komposit (yaitu widget yang bisa berisi widget-widget lain) akan berusaha untuk memberi fokus kepada widget yang ditampungnya sebelum mengambil fokus untuk dirinya sendiri. Beberapa widget 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).
Fungsi lain kontrol.isFocusControl() mengembalikan true jika kontrol tersebut sedang memegang fokus atau false jika tidak. Kita juga bisa mencari tahu kontrol mana yang sedang memiliki fokus dengan menggunakan metode pada kelas Displayyaitu Display.getFocusControl().
Berikut ini adalah daftar event dan listener yang berkaitan dengan fokus.
Mari kita lihat contoh berikut ini untuk memahami lebih lanjut tentang fokus input. Kita akan buat 2 widget yang berupa input teks. Ketika input teks atas menerima fokus, maka judul aplikasi kita ganti dengan "Fokus pada input teks atas". Ketika input teks bawah menerima fokus, maka judul aplikasi kita ganti dengan "Fokus pada input teks bawah". Jika input teks atas kehilangan fokus, kita isi input teks yang kehilangan fokus dengan "Saya kehilangan fokus", begitu input teks atas menerima fokus kembali, kita akan hapus kalimat tersebut.
Contoh program ini dapat Anda unduh di sini, untuk diimport pada Eclipse. Pembahasan detail tentang contoh program ini akan dibahas kemudian.
Event pada Tombol
Ketika suatu tombol pada keyboard ditekan, event tombol akan dibuat dan diberikan kepada aplikasi kita. Akan tetapi, tergantung pada platformnya, kedaerahan (locale), dan kombinasi tombol, ada kalanya event tidak terjadi. Misalnya, pada karakter Eropa yang memiliki aksen, mesin pengolah karakter dari sistem operasi akan mengambil tombol tersebut untuk diolah. Misalnya pada kedaerahan Jerman jika karakter ^ ditekan kemudian diikuti dengan tombol e, maka karakter ê akan ditampilkan. Demikian juga jika tombol bantu ditekan untuk mengolah bahasa Jepang, IME akan mengolah urutan karakter menjadi karakter Kanji.
Dengan kata lain, event tingkat rendah seperti ini sangat bergantung pada platform dan sistem operasi, sehingga tidak terlalu berguna untuk kebanyakan program. SWT menyembunyikan event sistem operasi dan hanya menampilkan satu event tombol saja setelah sistem operasi selesai mengolah tombol tersebut.
Berikut ini adalah daftar event dan listener yang berkaitan dengan tombol.
Event SWT.KeyDown dan SWT.KeyUp merupakan representasi tingkat tinggi dari tombol yang ditekan dan dilepaskan. Event-event ini berguna jika kita ingin mencegat suatu tombol tertentu dan melakukan aksi khusus ketika tombol itu ditekan.
Berikut ini adalah isi event keyboard ketika ditekan/dilepaskan.
character berisi karakter yang kita masukkan lewat keyboard setelah diolah oleh sistem operasi. Misalnya jika kita menekan tombol maka character berisi 'a'. Jika tombol dan ditekan, maka character berisi 'A'. Jika tombol dan ditekan, maka character akan diisi karakter yang bersesuaian dengan Ctrl+a, yaitu karakter dengan kode Unicode '\u0001' (atau SOH). Beberapa tombol seperti Enter, Backspace, Tab, memiliki kode karakter Unicode tersendiri. SWT juga memiliki konstanta untuk mewakili tombol-tombol ini, yaitu
keyCode berisi karakter yang tidak bisa diwakilkan dengan karakter Unicode, misalnya tombol , tombol , tombol , dan lain-lain termasuk tombol angka pada keypad dan tombol <+> <-> <*> pada keypad. Beberapa tombol tersebut dilambangkan dalam konstanta sebagai berikut. Khusus untuk keypad, apabila tombol <+> ditekan, maka selainkeyCode berisi SWT.KEYPADD_ADD, character juga berisi '+'.
stateMask berisi tombol sebelum tombol ditekan, yang biasanya, , , . Pada kebanyakan keyboard hanya ada 3 tombol pertama, akan tetapi ada juga yang memiliki lebih dari 3 tombol. Tombol-tombol ini disebut tombol pengubah.
SWT membuat tombol-tombol ini menjadi kode seperti
Dengan representasi seperti ini, maka SWT bisa dijalankan pada beberapa platform, dan tidak bergantung dengan tombol apa yang ada pada suatu sistem operasi. Bayangkan jika Anda ingin menggunakan + untuk membuat karakter menjadi tebal, akan tetapi tombol tidak tersedia pada Macintosh.
Untuk menguji tombol pengubah mana yang ditekan, kita bisa menggunakan bitwise AND, misalnya (e.stateMask &SWT.SHIFT).
Berikut ini adalah contoh program pelacak keyboard yang akan melaporkan tombol apa yang Anda tekan dan lepaskan. Contoh program ini dapat Anda unduh di sini untuk mengimportnya ke dalam Eclipse. Jalankan program ini pada Eclipse, kemudian ketik apa saja di program Anda, perhatikan "Console" di Eclipse 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 wudget. Karena SWT menggunakan widget bawaan sistem operasi, pengolahan tombol terjadi di level sistem operasi. Misalnya, ketika user mengetik pada widget teks, listener SWT.KeyDown akan dijalankan, kemudian sistem operasi akan memasukkan karakter dan menggambarnya kembali dijalankan oleh sistem operasi. Dengan menggunakan doit, kita bisa membuang karakter tersebut untuk tidak meneruskannya ke sistem operasi.
Contoh berikut akan menghalangi user untuk memasukkan karakter pada widget teks dengan mengeset doit menjadi falsesetiap kali event SWT.KeyDown terjadi.
Untuk memberikan fokus kepada suatu komponen, kita bisa menggunakan metode setFocus() yang terdapat pada hampir semua widget. Jika kontrol adalah objek bertipe suatu widget yang bisa menerima fokus dan sukses adalah variabel bertipeboolean, maka
sukses = kontrol.setFocus();
memberi perintah kepada kontrol untuk mencoba mengambil fokus input. Jika kontrol atau salah satu komponen yang ditampungnya berhasil mengambil fokus, fungsi ini akan mengembalikan true. Jika gagal, maka false akan dikembalikan.
Widget komposit (yaitu widget yang bisa berisi widget-widget lain) akan berusaha untuk memberi fokus kepada widget yang ditampungnya sebelum mengambil fokus untuk dirinya sendiri. Beberapa widget 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).
Fungsi lain kontrol.isFocusControl() mengembalikan true jika kontrol tersebut sedang memegang fokus atau false jika tidak. Kita juga bisa mencari tahu kontrol mana yang sedang memiliki fokus dengan menggunakan metode pada kelas Displayyaitu Display.getFocusControl().
Berikut ini adalah daftar event dan listener yang berkaitan dengan fokus.
Kelas Event (event bertipe) | Interface/Kelas Listener(listener bertipe) | Metode (listener bertipe) | Jenis event (event tanpa tipe) | Penjelasan |
FocusEvent | FocusListener (dan FocusAdapter) | focusGained(FocusEvent) | SWT.FocusIn | Widget menerima fokus dari keyboard |
focusLost(FocusEvent) | SWT.FocusOut | Widget kehilangan fokus dari keyboard |
Contoh program ini dapat Anda unduh di sini, untuk diimport pada Eclipse. Pembahasan detail tentang contoh program ini akan dibahas kemudian.
Event pada Tombol
Ketika suatu tombol pada keyboard ditekan, event tombol akan dibuat dan diberikan kepada aplikasi kita. Akan tetapi, tergantung pada platformnya, kedaerahan (locale), dan kombinasi tombol, ada kalanya event tidak terjadi. Misalnya, pada karakter Eropa yang memiliki aksen, mesin pengolah karakter dari sistem operasi akan mengambil tombol tersebut untuk diolah. Misalnya pada kedaerahan Jerman jika karakter ^ ditekan kemudian diikuti dengan tombol e, maka karakter ê akan ditampilkan. Demikian juga jika tombol bantu ditekan untuk mengolah bahasa Jepang, IME akan mengolah urutan karakter menjadi karakter Kanji.
Dengan kata lain, event tingkat rendah seperti ini sangat bergantung pada platform dan sistem operasi, sehingga tidak terlalu berguna untuk kebanyakan program. SWT menyembunyikan event sistem operasi dan hanya menampilkan satu event tombol saja setelah sistem operasi selesai mengolah tombol tersebut.
Berikut ini adalah daftar event dan listener yang berkaitan dengan tombol.
Kelas Event (event bertipe) | Interface/Kelas Listener(listener bertipe) | Metode (listener bertipe) | Jenis event (event tanpa tipe) | Penjelasan |
KeyEvent | KeyListener (dan KeyAdapter) | keyPressed(KeyEvent) | SWT.KeyDown | Tombol ditekan |
keyReleased(keyEvent) | SWT.KeyUp | Tombol dilepaskan |
Event SWT.KeyDown dan SWT.KeyUp merupakan representasi tingkat tinggi dari tombol yang ditekan dan dilepaskan. Event-event ini berguna jika kita ingin mencegat suatu tombol tertentu dan melakukan aksi khusus ketika tombol itu ditekan.
Berikut ini adalah isi event keyboard ketika ditekan/dilepaskan.
Nama Field | Penjelasan |
character | Nilai Unicode dari karakter yang ditekan |
keyCode | Konstanta yang menunjukkan tombol mana yang ditekan, misalnya SWT.PAGE_UP |
stateMask | Melambangkan tombol tambahan, misalnya SWT.SHIFT |
doit | Suatu boolean yang bisa digunakan untuk membatalkan aksi penekanan tombol |
Konstanta character | Penjelasan |
SWT.BS | Tombol backspace |
SWT.CR | Tombol Enter |
SWT.DEL | Tombol Del |
SWT.ESC | Tombol Esc |
SWT.LF | Tombol LF |
SWT.TAB | Tombol Tab |
SWT.F1 | SWT.F11 | SWT.PAGE_DOWN | SWT.KEYPAD_0 | SWT.KEYPAD_EQUAL |
SWT.F2 | SWT.F12 | SWT.HOME | SWT.KEYPAD_1 | SWT.KEYPAD_CR |
SWT.F3 | SWT.F13 | SWT.END | SWT.KEYPAD_2 | SWT.HELP |
SWT.F4 | SWT.F14 | SWT.INSERT | SWT.KEYPAD_3 | SWT.CAPS_LOCK |
SWT.F5 | SWT.F15 | SWT.KEYPAD_MULTIPLY | SWT.KEYPAD_4 | SWT.NUM_LOCK |
SWT.F6 | SWT.ARROW_UP | SWT.KEYPAD_ADD | SWT.KEYPAD_5 | SWT.SCROLL_LOCK |
SWT.F7 | SWT.ARROW_DOWN | SWT.KEYPAD_SUBTRACT | SWT.KEYPAD_6 | SWT.PAUSE |
SWT.F8 | SWT.ARROW_LEFT | SWT.KEYPAD_DECIMAL | SWT.KEYPAD_7 | SWT.BREAK |
SWT.F9 | SWT.ARROW_RIGHT | SWT.KEYPAD_DIVIDE | SWT.KEYPAD_8 | SWT.PRINT_SCREEN |
SWT.F10 | SWT.PAGE_UP | SWT.KEYPAD_0 | SWT.KEYPAD_9 |
stateMask berisi tombol sebelum tombol ditekan, yang biasanya
SWT membuat tombol-tombol ini menjadi kode seperti
stateMask | Penjelasan |
SWT.MOD1 | Tombol pengubah pertama ditekan (biasanya SWT.CONTROL pada Windows atau SWT.COMMAND pada Macintosh) |
SWT.MOD2 | Tombol pengubah kedua ditekan (biasanya SWT.SHIFT) |
SWT.MOD3 | Tombol pengubah ketiga ditekan (biasanya SWT.ALT) |
SWT.MOD4 | Tombol pengubah keempat ditekan (biasanya 0) |
SWT.MODIFIER_MASK | Gabungan dari keempatnya (menggunakan bitwise OR) |
Untuk menguji tombol pengubah mana yang ditekan, kita bisa menggunakan bitwise AND, misalnya (e.stateMask &SWT.SHIFT).
Berikut ini adalah contoh program pelacak keyboard yang akan melaporkan tombol apa yang Anda tekan dan lepaskan. Contoh program ini dapat Anda
Kadang kala dalam kondisi yang sangat langka, kita harus mengolah sendiri tombol kita sebelum diolah oleh suatu wudget. Karena SWT menggunakan widget bawaan sistem operasi, pengolahan tombol terjadi di level sistem operasi. Misalnya, ketika user mengetik pada widget teks, listener SWT.KeyDown akan dijalankan, kemudian sistem operasi akan memasukkan karakter dan menggambarnya kembali dijalankan oleh sistem operasi. Dengan menggunakan doit, kita bisa membuang karakter tersebut untuk tidak meneruskannya ke sistem operasi.
Contoh berikut akan menghalangi user untuk memasukkan karakter pada widget teks dengan mengeset doit menjadi falsesetiap kali event SWT.KeyDown terjadi.
package com.lyracc.penghalangtombol; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; public class PenghalangTombol { /** * @param args */ public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); Text text = new Text(shell, SWT.SINGLE | SWT.BORDER); text.addListener(SWT.KeyDown, new Listener() { public void handleEvent(Event event) { event.doit = false; } }); text.pack(); shell.pack(); shell.open(); while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep(); display.dispose(); } }
Tidak ada komentar:
Posting Komentar