04
Feb
08

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


3 Tanggapan ke “Fasilitas JTextField”


  1. 1 selaludiam Maret 15, 2008 pukul 3:56 pm

    kalo ngisi JTextField dengan angka aja gimana???(selain angka g bisa dimasukkan)

  2. 2 echo Maret 27, 2008 pukul 2:23 pm
  3. 3 fahrs Mei 2, 2008 pukul 2:11 am

    wah… makasih banget ya….

Tinggalkan Balasan




Kalender DoanK!!!

Februari 2008
S S R K J S M
« Jan   Mar »
 123
45678910
11121314151617
18192021222324
2526272829  

WHo's in MyWEB

website counter

Counter STRIKE

  • 77,027 STRIKE

CAtegory CUrhat...

Arsive