Martinus Ady H. BloG

Human Knowledge Belongs To The World

Swing Component Focus Handler Using KeyStroke Editor

| Comments

Buat teman-teman yang sering membangun aplikasi menggunakan GUI Toolkit Swing pasti sudah tahu bagaimana caranya menambahkan focus handler pada komponen Swing. Sebagai contohnya, kita ingin menambahkan focus pada JTextField agar ketika kita menekan ENTER maka focus akan berpindah ke komponen yang lain. Nah biasanya, langkah yang kita lakukan adalah sebagai berikut : 1. Klik kanan pada JTextField kemudian memilih Event > Key > Key Pressed seperti gambar dibawah ini : AddKeyPressed
Menambahkan Focus Handler Secara Manual
2. Setelah itu kita tambahkan handler untuk mendeteksi penekanan tombol ENTER kemudian secara manual memindahkan focus ke komponen yang lain seperti kode dibawah ini:

    private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
        if (evt.getKeyChar() == KeyEvent.VK_ENTER) {
            /* Pindahkan focus ke jTextField2 */
            jTextField2.requestFocusInWindow();
        }
    }

Nah sekarang bayangkan bagaimana jika ada beberapa komponen lain yang harus kita tambahkan focusnya dengan cara seperti diatas ?? Tentunya pasti capek, karena kita harus mengetikkan kode yang sama berulang-ulang :) Dengan membuat sebuah custom komponen sendiri dan memanfaatkan fasilitas KeyStroke Editor yang terdapat pada NetBeans IDE, sekarang kita bisa menambahkan focus handler dengan mudah seperti gambar dibawah ini : ChooseNextComponent
Memilih komponen selanjutnya yang harus menerima focus

AddFocusHandler
Menambahkan focus handler menggunakan KeyStroke Editor NetBeans

HasilAkhirPropertiesPallete
Hasil akhir yang terlihat pada Pallete Properties NetBeans

dan kode yang ditambahkan oleh NetBeans adalah seperti berikut :

        mTextField1.setText("mTextField1");
        mTextField1.setNextComponent(jTextField2);
        mTextField1.setNextComponentHandler(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER, 0));

Hm… lebih mudah bukan ?? Karena kita sudah tidak perlu melakukan proses ketik-mengetik lagi :) Dan sekarang, bagaimana caranya membuat agar custom komponen kita seperti diatas ?? Caranya sangat mudah, yaitu kita tinggal meng-extends komponen Swing yang ingin kita gunakan dan tambahkan 2 buah property seperti kode dibawah ini :

/**
 *
 * @author martin
 */
public class MTextField extends javax.swing.JTextField implements Serializable {

    ....
    ....
    private KeyStroke nextComponentHandler;
    private Component nextComponent;
    ....
    ....

Setelah menambahkan 2 buah property seperti diatas, sekarang tambahkan method getter dan setter untuk menerima inputan dari user dan agar terlihat dari Pallete Properties milik NetBeans seperti dibawah ini:

    public Component getNextComponent() {
        return nextComponent;
    }

    public void setNextComponent(Component nextComponent) {
        this.nextComponent = nextComponent;
    }

    public KeyStroke getNextComponentHandler() {
        return nextComponentHandler;
    }

    public void setNextComponentHandler(KeyStroke nextComponentHandler) {
        this.nextComponentHandler = nextComponentHandler;
    }

Sekarang buatlah sebuah protected class yang meng-implements-kan KeyListener dan menangkap aksi keyPressed yang terjadi seperti kode dibawah ini:

    ////////////////////////////////////////////////////////////////////////////
    // NextComponentHandler ini digunakan untuk memindahkan focus sekarang ke
    // komponen selanjutnya berdasarkan KeyStroke yang diberikan oleh client
    // melalui method setNextComponentHandler();
    ///////////////////////////////////////////////////////////////////////////
    protected class NextComponentHandler implements KeyListener {
        public void keyTyped(KeyEvent e) { }

        public void keyReleased(KeyEvent e) { }

        public void keyPressed(KeyEvent e) {
            if (nextComponentHandler != null && nextComponent != null) {
                if (e.getKeyCode() == nextComponentHandler.getKeyCode()) {
                    nextComponent.requestFocusInWindow();
                }
            }
        }
    }

Langkah terakhir yang harus kita lakukan yaitu menambahkan class NextComponentHandler ini pada custom komponen kita dengan cara menambahkannya pada constructor komponen kita seperti kode dibawah ini:

    ......
    ......
    public MTextField(Document doc, String text, int columns) {
        super(doc, text, columns);
        addActionHandler();
    }

    ......
    ......

    private void addActionHandler() {
        addKeyListener(new NextComponentHandler());
    }

Setelah selesai, sekarang coba lakukan proses build agar kita mendapatkan file *.jar dari custom komponen kita kemudian tambahkanlah ke NetBeans Pallete dan coba gunakan. Asyik bukan ?? :)

Related Link: - Source Lengkap MTextField - Sample NetBeans Project Focus - Membuat dan Menambahkan Swing Custom Component Ke NetBeans Pallete

Beri Komentar Lewat Facebook:

Beri Komentar Lewat Disqus: