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..

About Saiful Anwar

Simple, ga mau sesuatu yang berlebihan.. Cukup nikmati saja tentang diri sendiri apa adanya

Posted on 27 May 2010, in Java NetBeans. Bookmark the permalink. 1 Comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: