Eko Kurniawan Khannedy

Validasi Pada JTextField

Ditulis dalam Java Programming oleh Eko Kurniawan Khannedy pada 4 Februari 2008

bagaimana kalo validasi biner?Sebenarnya gak harus biner, tapi bisa juga hexa ato oktal, tapi saya males kalo bikin scrip panjang-panjang. OK langsung ke permasalahan, misal kita pengen memvalidasi sebuah JTextField agar input yang dimasukkan harus bilangan binner…

Sebelum masuk ke solusi mungkin kita harus bahas dulu tentang masalahnya. Karena bilangan yang diinput harus biner maka karakter yang boleh diinput Cuma ‘0’ dan ‘1’. Bener kan, setahu saya sih di mata kuliah Aljabar Boolean dan Pengantar Ilmu Komputer sih bener, hehehe…

Solusi Standar?

Solusi yang digunakan adalah dengan membuat sebuah validasi, misal ada form yang diminta diinputkan bilangan biner trus ketika disubmit maka akan divalidasi apakah input yang dimasukkan adalah biner atau bukan, jika bukan maka akan ada pesan kesalahan.

Sekarang coba anda buat sebuah Form seperti dibawah ini :

Saya sarankan untuk menggunakan NetBeans, karena NetBeans memiliki plugin yang sangat berguna untuk pengembang Swing yaitu “Mattise GUI Builder”, sehingga kita bisa membuat aplikasi Swing dengan cepat dam mempercepat proses pembuatan 99% dari pada anda coding sendiri…

Sekarang kita tinggal memberi validasi untuk JTextField :

Langkah pertama kita tambahkan sebuah ActionListener untuk tombol Submit. Lalu buat seluruh validasi dalam ActionListener buton tersebut. Pertama kita buat sebuah array katakter dari input textfield:

char[] array = textFieldBinner.getText().toCharArray();

setelah buat variabel boolean yang menyatakan apakah input yang dimasukkan valid atau tidak, jangan lupa untuk mendeklarasikan variabelnya dengan nilai false hal ini berguna ketika user tak menginputkan satu karakterpun ke dalam JTextField:

boolean valid = false;

buat perulangan yang mengecek setiap karakter dalam array karakter yang telah dibuat sebelumnya, jika input merupakan bilangan biner yang artinye terdiri dari karakter ‘1’ dan ‘0’, maka validasi bernilai true, dan sebaliknya jika salah validasi bernilai false :

for (char i : array) {

if (i == ‘0′ || i == ‘1′) {

valid = true;

} else {

valid = false;

break;

}

}

break” berguna agar perulangan berhenti ketika menemukan karakter yang tak valid. Setelah itu buat message box yang menampilkan hasil validasi :

if (valid) {

JOptionPane.showMessageDialog(null, “BENAR”);

} else {

JOptionPane.showMessageDialog(null, “SALAH”);

}

Dan dibawah ini adalah kode lengkapnya :

char[] array = textFieldBinner.getText().toCharArray();

boolean valid = false;

for (char i : array) {

if (i == ‘0′ || i == ‘1′) {

valid = true;

} else {

valid = false;

break;

}

}

if (valid) {

JOptionPane.showMessageDialog(null, “BENAR”);

} else {

JOptionPane.showMessageDialog(null, “SALAH”);

}

Sehingga ketika user salah menginputkan data salah maka akan muncul pesan kesalahan :

Dan jika user benar menginputkan data, maka akan muncul pesan :

Solusi Ngawur?

Wah kalo saya gunakan solusi standar diatas, cape deh! Tiap memvalidasi saya harus tekan tombol submit dulu. Saya sich pengen langsung aja divalidasi ketika user memasukkan data, jadi ketika user menekan key yang bukan merupakan bilangan biner, maka JTextField gak kan menampilkan key yang ditekan tersebut.

Dalam sebuah JTextField, data string yang kita inputkan itu di masukkan ke dalam sebuah Document dan secara default JTextField menggunakan PlainDocument, hal ini dikarenakan JTextField hanya mendukung 1 style, berbeda dengan JTextPane yang mendukung banyak style. nah kembali kepermasalahan untuk memvalidasi input JTextField agar tak masuk ke Document, kita harus sedikit memberi trik saat sebuah input String masuk ke Document. Caranya adalah dengan membuat Document sendiri, lalu menset Document tersebut ke JTextField:

textFieldBinner.setDocument(new PlainDocument() {

@Override

public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {

// Validasi Disini

super.insertString(offs, str, a);

}

});

Pada skrip diatas saya menset sebuah JTextField dengan PlainDocument yang saya override salah satu metodenya yaitu insertString, kenapa mengoveride metode tersebut? Karena sebuah String yang akan masuk ke Document harus melewati metode tersebut sehingga kita bisa validasi setiap karakter yang akan masuk ke Document.

Sama seperti halnya solusi standar diatas, untuk solusi ngawur pun kita menggunakan validasi yang sama seperti solusi standar hanya berbeda pada akhir skript :

char[] array = str.toCharArray();

boolean valid = false;

for (char i : array) {

if (i == ‘0′ || i == ‘1′) {

valid = true;

} else {

valid = false;

break;

}

}

if (valid) {

super.insertString(offs, str, a);

} else {

Toolkit.getDefaultToolkit().beep();

}

Artinya jika validasi berjalan benar maka, string yang diinputkan user akan dimasukkan ke Document jika salah maka akan ada bunyi beep, tergantung suara dalam setting default komputer anda. Dan script lengkapnya seperti ini :

textFieldBinner.setDocument(new PlainDocument() {

@Override

public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {

char[] array = str.toCharArray();

boolean valid = false;

for (char i : array) {

if (i == ‘0′ || i == ‘1′) {

valid = true;

} else {

valid = false;

break;

}

}

if (valid) {

super.insertString(offs, str, a);

} else {

Toolkit.getDefaultToolkit().beep();

}

}

});

Sekarang coba jalankan lalu masukkan inputan selain ‘1’ dan ‘0’, pasti akan terdengar suara beep :

Kesimpulan

Untuk memvalidasi inputan user anda cukup mengoverride dan merubah metode insertString dalam Document yang diset ke JTextField

12 Tanggapan

Subscribe to comments with RSS.

  1. Neo said, on 9 Februari 2008 at 08:10

    Haha2 Keren, Bagi2 tutorial tentang java graphic dong???

  2. farazinux said, on 9 Mei 2008 at 07:09

    Mas Echooo gimana ya.. caranya meload form lain di NetBeans…? soalnya dari sekian banyak tutorial yang ane baca cuma ada single form gak ada yang multiple form. Tulung ya… di posting atau dikasih ke e-mail saya di farazinux@mail.com
    Trims…..
    Eh … boleh ane link ya.. di blog farazinux.wordpress.com
    Thanks… hebat…

  3. reZaa said, on 21 Oktober 2008 at 21:53

    mas.. echoo… tolong dong buatin contoh multiple form dan hasilNya dari semua yg telah kita input kemudian di tampilin ke dalam bentuk table GUI…

    tolong di posting atau kirim k e-mail saya…

    atas perhatiannya terima kasih.. ^.^

    thx..

  4. Belajar JaVa « WAHYU FIGHTER said, on 5 April 2009 at 03:26

    [...] validasi pada jtextfield [...]

  5. Fifi said, on 6 Mei 2009 at 21:45

    hi mas echo thanks banget tutorialx bwt validasi inputan JTextField

    BTW aq boleh nanya bwt validasi inputan JTextField dimana inputannya
    hanya boleh angka g???

    Please yach…

    Help Me

    Thanks B4

    • echo said, on 7 Mei 2009 at 00:32

      ya tinggal ubah aja yang diatas
      dari pengecekan BINER jadi Angka Biasa

  6. [...] validasi pada jtextfield [...]

  7. ulil said, on 26 Juni 2009 at 06:18

    maksh bro tutorialnya…btw m tnya nih… gmn kalo validasiy g cuma buat angka saja tapi juga buat huruf dan karaktr lainya n ap bisa qt pk selain net beans

    • echo said, on 26 Juni 2009 at 10:04

      intinya sih sama aja seperti tutorial diatas
      dan gak harus pake netbeans, pake notepad juga boleh :D

  8. Abu said, on 1 Juli 2009 at 12:43

    mas Kalo GW mau Masukin Ya CUMan Angka dan huruf

    huruf dulu terus baru angaka, huruf hanya di depan bisa nya dan abis gitu anggka gimana validasi ya kirim ke imel gw ya source code yaAtu blog gw

  9. Abu Y said, on 1 Juli 2009 at 12:44

    mas Kalo GW mau Masukin Ya CUMan Angka dan huruf

    huruf dulu terus baru angaka, huruf hanya di depan bisa nya dan abis gitu anggka gimana validasi ya kirim ke imel gw ya source code yaAtu blog gw okem oke

  10. huh...... said, on 8 September 2009 at 09:45

    textFieldBinner.setDocument(new PlainDocument() {

    @Override

    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {

    char[] array = str.toCharArray();

    boolean valid = false;

    for (char i : array) {

    if (i == ‘0′ || i == ‘1′) {

    valid = true;

    } else {

    valid = false;

    break;

    }

    }

    if (valid) {

    super.insertString(offs, str, a);

    } else {

    Toolkit.getDefaultToolkit().beep();

    }

    }

    });
    coding ini taruh dimana kalau pake netbeans?


Tinggalkan Balasan