Fasilitas JTextField


Begini ceritanya…Seperti yang saya bilang tadi kalo Swing itu gak native, so untuk memberi fasilitas seperti popup menu kita harus secara manual memberinya ke JTextField, berbeda dengan SWT yang sangat native, secara default semua fasilitas OS yang kita gunakan pasti dapat dimanfaatkan oleh SWT, salah satunya fasilitas popup menu TextField :

jtextfield

Gimana jadinya?

Solusi Standar?

Saat ini JTextComponent dalam Swing telah memiliki fasilitas cut, copy, paste, selectAll. Jadi kesimpulannya kita gak perlu cape-cape membuat kode tentang Clipboard. Yang kita butuhkan hanyalah ketekunan untuk membuat JpopupMenu untuk JTextFiled, lalu memberi JMenuItem yang diperlukan seperti Copy, Cut, Paste.

Jadi kesimpulannya untuk memberi fasilitas tersebut kita bisa menggunakan metode dibawah ini :

Untuk mengcopy text yang terseleksi :

textField.copy();

Untuk mengcut text yang terseleksi :

textField.cut();

Untuk mengpaste text yang ada di clipboard :

textField.paste();

Untuk menseksi seluruh teks yang ada di JTextField :

textField.selectAll();

Dan untuk memfasilitasi Undo Redo kita harus menggunakan class UndoManager :

UndoManager manager = new UndoManager();

Lalu kita berikan JTextField yang kita buat dengan fasilitas undo redo :

textField.getDocument().addUndoableEditListener(new UndoableEditListener() {

public void undoableEditHappened(UndoableEditEvent e) {

manager.addEdit(e.getEdit());

}

});

Setelah itu untuk menjalankan aksi Undo kita gunakan script dibawah ini :

try{

manager.undo();

}catch(CannotUndoException t){

}

Dan untuk menjalankan aksi Redo kita gunakan script ini :

try{

manager.redo();

}catch(CannotRedoException e){

}

Dan selesai !

Solusi Ngawur?

?

Wah sebenarnya sich gak ada solusi ngawurnya. Karena solusinya sama seperti solusi standar, hanya saja kita perlu mensiasati ato memberi sedikit trix dalam pembuatan JPopupMenu-nya. Kenapa? Karena dalam sebuah form kita tak mungkin menggunakan satu JTextField, setidaknya kita pasti menggunakan lebih dari satu JTextField. Bayangkan jika setiap JTextField, kita harus membuat JPopupMenu, capedeh…

Salah satu trixnya adalah kita harus membuat metode static yang berisikan seluruh script yang ada dalam solusi standar diatas, sehingga untuk menambah fasilitas seperti diatas kita hanya perlu memanggil metode static yang kita gunakan.

Ini contoh metode static nya, sebenarnya anda bisa membuat menggunakan style anda sendiri :

public static final void setFasilitasNative(final JTextField textField) {

final UndoManager manager = new UndoManager();

textField.getDocument().addUndoableEditListener(new UndoableEditListener() {

public void undoableEditHappened(UndoableEditEvent e) {

manager.addEdit(e.getEdit());

}

});

final JPopupMenu menu = new JPopupMenu();

textField.setComponentPopupMenu(menu);

final JMenuItem itemCopy = new JMenuItem(“Copy”);

itemCopy.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.copy();

}

});

menu.add(itemCopy);

final JMenuItem itemCut = new JMenuItem(“Cut”);

itemCut.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.cut();

}

});

menu.add(itemCut);

final JMenuItem itemPaste = new JMenuItem(“Paste”);

itemPaste.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.paste();

}

});

menu.add(itemPaste);

menu.addSeparator();

final JMenuItem itemUndo = new JMenuItem(“Undo”);

itemUndo.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

manager.undo();

} catch (CannotUndoException t) {

}

}

});

menu.add(itemUndo);

final JMenuItem itemRedo = new JMenuItem(“Redo”);

itemRedo.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

manager.redo();

} catch (CannotRedoException t) {

}

}

});

menu.add(itemRedo);

}

Simple aja deh, masalahnya saya males buat script panjang-panjang. Tapi bukan berarti anda harus menggunakan script yang saya buat. Anda bisa membuat sendiri atau merubah script saya diatas.

Untuk memberi fasilitas ke JTextField menggunakan metode static diatas, cukup gunakan script seperti dibawah ini :

setFasilitasNative(textEmail);

setFasilitasNative(textKantor);

setFasilitasNative(textNama);

setFasilitasNative(textRumah);

setFasilitasNative(textTelephone);

Ini contohnya :

Kesimpulan

Jika anda akan membuat sebuah kode yang sekiranya diulang-ulang, lebih baik anda menggunakan metode static agar dapat digunakan beberapa kali, dari pada anda membuat ulang kode tersebut..

Iklan

11 pemikiran pada “Fasilitas JTextField

  1. Ping balik: Belajar JaVa « WAHYU FIGHTER

  2. Ping balik: Tutorial Java dari Eko Kurniawan Khannedy « nge-WP@net

  3. Usu, numpang nanya nih, sewaktu w bwt kustom swing komponen kyk lu dalam hal ini JMenuBar, kenapa komponen yg w bwt selalu bkn exception:
    java.lang.Error: getHelpMenu() not yet implemented.
    at javax.swing.JMenuBar.getHelpMenu(JMenuBar.java:223)
    Trus diproperties windownya muncul property helpMenu, padahal kalo JMenuBar biasa, disitu gak muncul ? Please help Me ? 🙂

  4. Sudah diimplement tapi, ttp error.
    Sorry tny lagi.
    Trus w buat Kustom JtextField spt yg ada di video lu, kalo dipake di JFrame tampilannya normal2 aja warna gradient dan rounded textfieldnya kelihatan. Tapi kalo w add ke JInternalFrame, Jtextfieldnya spt ketutup kotak warna putih. Kira2 kenapa ya. Trimzz

  5. Mas mo tanya apa bedanya panggunaan :
    – execute
    – executeUpdate
    – executeQuery
    Mohon penjelasannya mas

    Makasih sebelumnya……

  6. maaf mas, saya mau nanya nie(klo boleh sih)…
    gimana sih caranya biar jtexfieldnya saat kita compile jtextfieldnya tuh bener2 kosong,
    seperti pada vb gitu?
    tolong bantuannya ya mas…
    thnx b4

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s