Membatasi Jumlah Input Karakter Pada JTextField

JTextField yang disediakan oleh Java umumnya belum memiliki pembatasan jumlah karakter pada JTextField, hal ini dapat menyebabkan tidak sinkonnya apabila kita melakukan pembacaan data dari Database yang memiliki jumlah karakter. Oleh sebab itu untuk menghindari terjadi exception pada saat penyimpanan pada database maka kita sebaiknya melakukan pembatasan pada JTextField yang digunakan sesuai dengan panjang karakter dari field yang ada di database.
pembahasan kali ini adalah bagaimana kita membuat JTextField yang kita gunakan itu bisa memiliki jumlah karakter sehingga user atau pengguna hanya bisa memasukkan String yang memiliki karakter maksimum sesuai yang telah kita sediakan.
Pertama kita buat terlebih dahulu satu class JTextFieldLimit yang diextendkan dari Plain Document, dan source codenya seperti berikut ini :
import javax.swing.text.*;

public class JTextFieldLimit extends PlainDocument {
    private int limit;
    // Opsi untuk merubah ke Uppercase
    private boolean toUppercase = false;

    JTextFieldLimit(int limit) {
        super();
        this.limit = limit;
    }

    JTextFieldLimit(int limit, boolean upper) {
        super();
        this.limit = limit;
        toUppercase = upper;
    }

    public void insertString
            (int offset, String  str, AttributeSet attr)
            throws BadLocationException {
        if (str == null) return;

        if ((getLength() + str.length()) <= limit) {
            if (toUppercase) str = str.toUpperCase();
            super.insertString(offset, str, attr);
        }
    }
}
Setelah class tersebut dibuat, selanjutnya anda tinggal menggunakannya di class-class yang diperlukan, berikut contoh penggunaannya :
import java.awt.*;
import javax.swing.*;

public class Tester extends JApplet{
    JTextField textfield1;
    JLabel label1;

    public void init() {
        getContentPane().setLayout(new FlowLayout());
        //
        label1 = new JLabel("Maksimum 10 Karakter");
        textfield1 = new JTextField(15);
        getContentPane().add(label1);
        getContentPane().add(textfield1);
        textfield1.setDocument
                (new JTextFieldLimit(10));
    }
}