

Kita sering membuat program dimana pada JTextField tersebut hanya boleh di isi dengan kumpulan karakter tertentu misal hanya angka saja atau huruf saja. nah disini kita sering kali merasa kesulitan kalu harus membatasi input.
untuk bisa menangani input yang tidak sesuai maka kita buat dulu class berikut:
/**
* FILTER TEST
* OLEH RACHMAD HW email: rac3_hw@yahoo.com blog: rachmad-hw.blogspot.com
*/
import javax.swing.text.*;
import java.util.regex.*;
import javax.swing.JOptionPane;
/**
*
* @author RAHW
*/
public class FilterText extends PlainDocument {
Pattern pattern;
Matcher sama;
public FilterText () { super(); }
public FilterText (AbstractDocument.Content c) { super(c); }
public FilterText (AbstractDocument.Content c, String p) {
super (c);
setPatternByString (p);
}
public FilterText (String p) {
super();
setPatternByString (p);
}
public void setPatternByString (String p) {
filter = p;
Pattern pattern = Pattern.compile (p);
// CEK APAKAH INPUT SESUAI DENGAN PATTERN
// DAN MENGAHAPUS YANG TIDAK SESUAI
try {
sama = pattern.matcher(getText(0, getLength()));
//System.out.println ("cek apakah sama " + getText (0, getLength()));
if (! sama.matches()) {
System.out.println ("Input Tidak Sesuai");
JOptionPane.showMessageDialog(null, "Input Tidak Sesuai dengan --> " + filter);
remove (0, getLength());
}
} catch (BadLocationException ble) {
ble.printStackTrace(); // impossible?
}
}
public Pattern getPattern() { return pattern; }
@Override
public void insertString (int offs, String s, AttributeSet a)
throws BadLocationException {
// consider whether this insert will match
String proposedInsert =
getText (0, offs) +
s +
getText (offs, getLength() - offs);
if (sama != null) {
sama.reset (proposedInsert);
if (! sama.matches()) {
System.out.println ("Input Tidak Sesuai");
JOptionPane.showMessageDialog(null, "Input Tidak Sesuai dengan --> " + filter);
return;
}
}
super.insertString (offs, s, a);
}
String filter;
}
kemudian kita set pada JTextField yang akan kita batasi inputnya, berikut perintahnya:
FilterText ft =new FilterText() ;
ft.setPatternByString("[0-9]*");
[0-9]* merupakan batasan input yang hanya memperbolehkan input berupa angka
[a-z]* merupakan batasan input yang hanya memperbolehkan input berupa huruf kecil
[A-Z]* merupakan batasan input yang hanya memperbolehkan input berupa huruf besar
Makin keren ae rek pemrogramane :D
ReplyDeleteKerja dimana nih sekarang :D
suwon, kerjaan masih tetep
ReplyDeleteint offs, String s, AttributeSet a
ReplyDeletevariabel yang 3 ini, untuk apa ya? bisa tolong dijelaskan?
Cara pakenya gimana ya??
ReplyDeleteMohon bantuannya
public FakturIFrame() {
ReplyDeleteinitComponents();
FilterText ft =new FilterText() ;
ft.setPatternByString("[0-9]*");
txtTotal.setDocument(ft);
}
Makasih banyak.
To Toha thx, da bantu jawab
ReplyDelete-----------------
www.4lifetransferfactorsurabaya.com - Solusi Sehat Tanpa Efek Samping
Mas kalo batasi inputannya kombinasi antara huruf dan angka tapi dibatasi hanya untuk 7.... misal "AMF07" tapi ngetiknya "AMF007" baru keluar jOption Pane nya bahwa "Id Terlalu panjang" bagai mana caranya...????
ReplyDeletemasih awan dengan java...