Kelas, inner class atau anonymous inner class yang bertindak sebagai obyek pendengar (listener object) harus mengimplementasikan interface KeyListener agar dapat mendengar adanya key event dan mendeklarasikan ulang semua metoda yang terdapat di interface KeyListener yaitu keyPressed, keyReleased dan keyTyped. Ketiga metoda tersebut memerlukan kelas KeyAction sebagai argumen parameternya.
Anda dapat menggunakan metoda keyPressed untuk menangani event yang dipicu saat penekanan tombol apa saja di keyboard, metoda keyReleased untuk menangani event ketika penekanan tombol keyboard dilepas yaitu setelah keyPressed atau keyTyped dan metoda keyTyped untuk menangani penekanan tombol apa saja yang bukan merupakan sebuah action key.
Action key yang dimaksud adalah tombol keyboard berupa tombol panah, Home, Page Up, End, Page Down, tombol-tombol fungsi yaitu function key seperti F1, F2 dan seterusnya, Pause, Num Lock, Print Screen, Scroll Lock dan Caps lock.
Berikut ini adalah contoh program yang mendemonstrasikan penanganan keyEvent. Setiap Anda menekan tombol di keyboard, maka label yang ada di tombol keyboard ditampilkan di jendela frame. Penanganan KeyEvent hanya dilakukan pada metoda keyPressed dan keyTyped, sedangkan metoda keyReleased dideklarasikan ulang dengan blok kosong).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | // Nama file : DemoKeyEvent.java // Mendemonstrasikan penekanan tombol di keyboard // Mengimpor kelas import javax.swing.*; import java.awt.*; import java.awt.event.*; // Deklarasi kelas DemoKeyEvent public class DemoKeyEvent extends JFrame implements KeyListener { private String str; private JLabel label; private Font font; public DemoKeyEvent() { font = new Font("Tahoma", Font.BOLD, 30); label = new JLabel("", JLabel.CENTER); label.setFont(font); label.setForeground(Color.BLUE); label.setHorizontalAlignment(SwingConstants.CENTER); Container container = getContentPane(); container.setBackground(Color.YELLOW); container.add(label, BorderLayout.CENTER); addKeyListener(this); } // Deklarasi ulang metoda keyPressed public void keyPressed(KeyEvent ke) { str = ke.getKeyText(ke.getKeyCode()); label.setText(str); } // Deklarasi ulang metoda keyReleased // dengan blok kosong public void keyReleased(KeyEvent ke) { } // Deklarasi ulang metoda keyTyped public void keyTyped(KeyEvent ke) { str = Character.toString(ke.getKeyChar()); label.setText(str); } // Metoda main public static void main(String[] args) { DemoKeyEvent frame = new DemoKeyEvent(); frame.setTitle("Kelas DemoKeyEvent"); frame.setSize(280, 120); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } |
Baris nomor 28 dari contoh program di atas adalah pernyataan untuk meregistrasi obyek pendengar (listener object) menggunakan metoda addKeyListener kelas Component. addKeyListener adalah metoda registrasi obyek pendengar bila obyek tersebut ingin mendengarkan (listening) setiap event yang dipicu dari penekanan tombol di keyboard.
Variabel yang mengacu ke obyek pendengar adalah argumen parameter metoda addKeyListener. Di pernyataan tersebut, argumen parameter metoda adalah kata kunci this. Kata kunci this sendiri mengacu ke obyek kelas DemoKeyEvent yang berfungsi sekaligus sebagai obyek pendengar dengan mengimplementasikan interface KeyListener.
Baris nomor 32 – 36 adalah deklarasi ulang metoda keyPressed dari interface KeyListener. Metoda keyPressed diminta atau dipanggil ketika tombol apa saja yang ada di keyboard ditekan. Di dalam blok metoda keyPressed, pernyataan baris nomor 34 akan menampilkan label tombol keyboard yang ditekan. Metoda getKeyCode kelas KeyEvent (diacu oleh variabel ke) digunakan untuk mendapatkan virtual key code dari tombol yang ditekan.
Di kelas KeyEvent yang digunakan sebagai argumen parameter metoda keyPressed, terdapat kumpulan konstanta yaitu virtual key-code constant yang mewakili setiap tombol keyboard. Nilai yang dikembalikan metoda getKeyCode kemudian diberikan ke metoda getKeyText. Nilai string berupa label tombol keyboard yang ditekan, yang dihasilkan oleh metoda getKeyText, kemudian di simpan di variabel string str. Baris nomor 35 adalah pernyataan untuk menampilkan nilai string yang tersimpan di variabel str ke obyek label kelas JLabel.
Baris nomor 40 – 42 adalah pernyataan untuk mendeklarasikan ulang metoda keyReleased dari interface KeyListener. Metoda keyReleased hanya berupa blok kosong dan tidak memiliki kode penanganan. Namun demikian, metoda ini tetap harus dideklarasikan karena semua metoda interface yang diimplementasi, harus dideklarasikan kecuali bila kelas DemoKeyEvent merupakan turunan dari KeyAdapter.
Baris nomor 45 – 49 adalah pernyataan untuk mendeklarasikan ulang metoda keyTyped dari interfes KeyListener. Di dalam metode ini, baris nomor 47 adalah pernyataan untuk menampilkan nilai karakter unicode tombol keyboard yang ditekan. Nilai karakter yang dihasilkan metoda getKeyChar kemudian diberikan ke metoda toString kelas Character untuk dikonversi dari tipe data char ke tipe String. Nilai hasil konversi disimpan di variabel str dan kemudian ditampilkan di label (baris nomor 48).