• Jadilah orang yang sesederhana mungkin yang kamu bisa
  • Jadilah orang yang sesederhana mungkin yang kamu bisa
  • Jadilah orang yang sesederhana mungkin yang kamu bisa
  • Jadilah orang yang sesederhana mungkin yang kamu bisa

Search

Loading...

Membatasi input pada jTextField

JTextField merupakan sebuah component dari java swing yang berguna untuk menerima inputan dari user. Kadang jika kita akan membuat sebuah textfield untuk tipe data tertentu, kita ingin membatasi inputnya. Misal kita ingin membuat sebuah textfield untuk no telpon. Kita menginginkan client hanya dapat memasukkan input dengan jumlah maximal 15 karakter, selain itu karakter yang dimasukan harus berupa angka dan tanda-tanda yang digunakan untuk menyimpan no telpon, seperti #, +, *. Untuk membuatnya kita hanya perlu mengubah setting document pada component jTextField. Tetapi sebelumnya kita harus membuat sebuah class baru yang diturunkan dari class PlainDocument untuk kita modifikasi sesuai kebutuhan kita.

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
*
* @author Jie
*/
public class PhoneValidator extends PlainDocument {
private int maxCharacter;
private boolean phoneOnly;
private String phoneChars = "+#*0123456789";
public PhoneValidator() {
this(-1, false);
}
public PhoneValidator(int maxCharacter, boolean phoneOnly) {
this.maxCharacter = maxCharacter;
this.phoneOnly = phoneOnly;
}
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (phoneOnly) {
if (maxCharacter == -1) {
if (checkString(str)) {
super.insertString(offs, str, a);
}
} else {
int panjangTextLama = getLength();
int panjangTextBaru = str.length();
if ((panjangTextLama + panjangTextBaru) <= maxCharacter) {
if (checkString(str)) {
super.insertString(offs, str, a);
}
}
}
} else {
if (maxCharacter == -1) {
super.insertString(offs, str, a);
} else {
int panjangTextLama = getLength();
int panjangTextBaru = str.length();
if ((panjangTextLama + panjangTextBaru) <= maxCharacter) {
super.insertString(offs, str, a);
}
}
}
}
private boolean checkString(String input) {
boolean result = false;
for (int i = 0; i < input.length(); i++) {
if (phoneChars.indexOf(input.charAt(i)) == -1) {
result = false;
break;
} else {
result = true;
}
}
return result;
}
}
Setelah kita selesai membuat class untuk validasinya, sekarang saatnya kita mencoba untuk membatasi input pada jTextField kita. Misal kita memiliki sebuah JTextField dengan nama variabel textNoTelpon. untuk mengubah validasinya menjadi maximal 15 karakter dan hanya dapat diberikan input berupa no telpon, kita dapat melakukannya dengan cara seperti berikut.

import javax.swing.JFrame;
import javax.swing.JTextField;
/**
*
* @author Jie
*/
public class TestValidasi {
public static void main(String[] args) {
JFrame frame = new JFrame("Test validasi text field");
JTextField textNoTelpon = new JTextField();
textNoTelpon.setDocument(new PhoneValidator(15, true));
frame.add(textNoTelpon);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Related Post



10 comments:

  1. mas klo saya mau ngisi field nya hanya untuk format waktu aja bgmn??
    contohnya 12:00 , 23:45, 05:50
    selain format itu tidak ada bisa

    atau ada lib khusus format time seperti diatas??
    mohon bantuannya, thx

    ReplyDelete
    Replies
    1. Bisa kok, tinggal ganti aja settingannya tapi gw lupa. hehe udah lama gak nge-Java desktop :p

      Delete
  2. kalo textfield nya buat angka aja gimana , cuman bebas banyak karakter .

    ReplyDelete
    Replies
    1. @Taufik Ismail
      tulis pada initcomponent

      public void keyTyped(KeyEvent e) {
      char c = e.getKeyChar();
      if (!((c >= '0') && (c <= '9') ||
      (c == KeyEvent.VK_BACK_SPACE) ||
      (c == KeyEvent.VK_DELETE))) {
      getToolkit().beep();
      e.consume();

      }
      }
      });

      Delete
    2. script yg anda tuliskan, muncul tandaseru berwarna merah di netbeans

      Delete
    3. coba import java.awt.event.KeyEvent;

      Delete
    4. cara menggunakannya panggil class tersebut pada event keytyped:
      misal kamu buat jTextfield1. klik kanan --> event --> keytyped. tambahkan keyTyped(evt); untuk pemanggilan classnya

      Delete
  3. mas kalau kayak tanyannya mas feri diatas, tapi charachternya juga dibatasi sesuai dengan databasenya gimana mas??
    nanti ketika melebihi karakter akan memunculkan pesan peringatan gitu,

    ReplyDelete
  4. mau saya bikinnya nomor telfon 085362400319 pas di enter berubah jd (0853)-62400319
    kayak mana caranya gan di netbeans

    ReplyDelete

Copyright © 2015 priawadi.com All Rights Reserved.