Saturday, September 11, 2010

Membatasi Jumlah Karakter pada JTextField

Sekali-sekali posting tutorial Java pake Bahasa Indonesia

Kadangkala, dalam membuat suatu program yang mengharuskan user mengisi suatu textfield, kita perlu membatasi jumlah karakter yang diketikkan. Dalam Java, class JTextField biasa tidak didesain untuk secara otomatis melakukannya. Coba saja Anda ketikkan satu juta karakter di sana, pasti masih bisa terpampang di layar. Nah, coba bayangkan kalau yang harus diinputkan adalah field kode barang, atau nomor telepon, atau apapun yang memiliki batas panjang. Tentu akan merepotkan kalau di program harus mengecek itu.

Untuk itu lebih mudah jika kita membatasi jumlah karakter yang bisa diinputkan dalam JTextField. Salah satu gunanya adalah saat field yang Anda perlukan itu harus disimpan dalam kolom database yang memiliki lebar karakter terbatas. Dalam HQLibrary, saya juga berencana membuat utility yang menangani hal simpel ini. Yah, meskipun ini sebenarnya hal sederhana, rasanya tetap perlu dimasukkan untuk mempermudah nantinya.

Oke, langsung masuk ke class yang saya buat. Class pertama, seperti biasa adalah Utility. Kali ini Class yang saya buat saya beri nama HQTextFieldUtil, yang nantinya akan berisi semua utility yang berhubungan dengan textfield.

/**
 * DO NOT REMOVE THIS LICENSE
 *
 * This source code is created by Muhammad Fauzil Haqqi.
 * You can use and modify this source code freely but
 * you are forbidden to change or remove this license.
 *
 * Nick  : Haqqi
 * YM    : xp_guitarist
 * Email : fauzil.haqqi@gmail.com
 * Blog  : http://www.fauzilhaqqi.net
 */
package hq.utility;

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 *
 * @author Haqqi
 */
public final class HQTextFieldUtil {
  // *******variables area****** //

  // *****constructors area***** //
  private HQTextFieldUtil() {
  }

  // ********methods area******* //
  public static void limitTextFieldChar(JTextField field, final int numChar) {
    if (numChar == 0) {
      field.setDocument(new PlainDocument());
      return;
    }

    PlainDocument pd = new PlainDocument() {

      private static final long serialVersionUID = 1L;
      private int limit = numChar;

      @Override
      public void insertString(int offs, String str, AttributeSet a)
          throws BadLocationException {
        if (str == null) {
          return;
        }
        if ((getLength() + str.length()) <= limit) {
          super.insertString(offs, str, a);
        }
      }
    };
    field.setDocument(pd);
  }
}

Pada method limitTextFieldChar(), akan dilakukan pembuatan suatu dokumen. Bagi yang belum mengerti, pada JTextField, sebenarnya kita tidak mengetikkan atau menyimpan hasil ketikan langsung di class milik swing tersebut. Alih-alih demikian, karakter-karakter yang kita ketikkan akan disimpan dalam suatu class yang bernama document. Nah, strategi dari pembatasan jumlah karakter ini adalah dengan mengeset dokumen baru ke textfield yang ada, dengan pengaturan sedemikian rupa. Saya melakukan override pada method insertString() untuk mengecek apakah karakter yang akan diketikkan akan menghasilkan panjang yang lebih dari limitasi.

Setelah membuat class ini, Anda bisa secara manual memanggilnya dengan

HQTextFieldUtil.limitTextFieldChar(suatuTextField, suatuAngka);

Tapi karena saya lebih suka mendesain GUI dengan NetBeans, saya akan membuat class HQLimitedTextField.

/**
 * DO NOT REMOVE THIS LICENSE
 *
 * This source code is created by Muhammad Fauzil Haqqi.
 * You can use and modify this source code freely but
 * you are forbidden to change or remove this license.
 *
 * Nick  : Haqqi
 * YM    : xp_guitarist
 * Email : fauzil.haqqi@gmail.com
 * Blog  : http://www.fauzilhaqqi.net
 */
package hq.widget;

import hq.utility.HQTextFieldUtil;
import javax.swing.JTextField;

/**
 *
 * @author Haqqi
 */
public class HQLimitedTextField extends JTextField {

  private static final long serialVersionUID = 1L;
  // *******variables area****** //
  private int limit;

  // *****constructors area***** //
  // ********methods area******* //
  /**
   * Get the value of limit
   *
   * @return the value of limit
   */
  public int getLimit() {
    return limit;
  }

  /**
   * Set the value of limit
   *
   * @param limit new value of limit
   */
  public void setLimit(int limit) {
    this.limit = limit;
    firePropertyChange("limit", getLimit(), limit);
    HQTextFieldUtil.limitTextFieldChar(this, limit);
  }
}

Dengan demikian, setelah proses drag and drop, saya bisa mengatur limitnya menggunakan panel properties yang ada pada NetBeans. Sangat mudah bukan? Happy coding :-)

Sebenarnya saya akan meng-extend-kan class ini dari HQTextField yang telah diubah tampilannya. Tujuannya adalah agar semua turunannya seragam. Tapi sudahlah, karena memang belum jadi ya ini dulu.

English keywords:Java tutorial how to limit number of character in JTextField

Comments are closed.
blog comments powered by Disqus
 

My Tweets

Banners

Tag Cloud

Get Adobe Flash playerPlugin by wpburn.com wordpress themes