Membatasi Karakter JTextField dengan PlainDocument

pembatasan karakter sering kali kita perlukan untuk inputan data, misalkan pada saat memasukkan data siswa, No Induk Siswa (NIS) hanya boleh diinputkan angka dan maksimal 5 karakter.. oleh karena itu disini diperlukan pembatasan mengenai jumlah inputan dan karakter yang boleh diinputkan..

Java menyediakan Plain Document untuk mengatur data yang bisa dimasukkan ke TextField yang kita buat, oleh karena itu disini kita tidak memodifikasi event TextField tapi kita langsung memodifikasi Plain Document yang digunakan oleh TextField yang kita gunakan.

PlainDocument ini akan kita buat menjadi sebuah Class tersendiri supaya bisa kita gunakan di TextField mana saja tanpa perlu menuliskan ulang source code-nya.

oke coba perhatikan source code berikut :

 

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */

package myapps;

 

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.PlainDocument;

 

/**

 *

 * @author Doel Dhe’i

 */

public class DocumentLimit extends PlainDocument {

 

    private int limit = 0;

    private int mode = DocumentLimit.NONE;

    public static final int ONLY_DIGIT = 1;

    public static final int ONLY_LETTER = 2;

    public static final int DIGIT_AND_LETTER_ONLY = 3;

    public static final int NONE = 0;

 

    public DocumentLimit(int limit, int mode) {

        super();

        this.limit = limit;

        this.mode = mode;

    }

    public DocumentLimit() {}

 

    @Override

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

        if (str == null) {

            return;

        }

        boolean validate = false;

        switch (mode) {

            case DocumentLimit.DIGIT_AND_LETTER_ONLY:

                if (Character.isLetterOrDigit(str.charAt(0))) {

                    validate = true;

                }

                break;

            case DocumentLimit.ONLY_DIGIT:

                if (Character.isDigit(str.charAt(0))) {

                    validate = true;

                }

                break;

            case DocumentLimit.ONLY_LETTER:

                if (Character.isLetter(str.charAt(0))) {

                    validate = true;

                }

                break;

            case DocumentLimit.NONE:

                validate = true;

                break;

        }

        if (validate && getLength() + str.length() <= this.limit) {

            super.insertString(offs, str, a);

        }

    }

}

 

class diatas adalah class turunan dari plain document kita…
sekarang mari kita coba implementasikan class diatas dalam sebuah program yang lain..
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myapps;
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
 *
 * @author Doel Dhe’i
 */
public class testing extends JFrame {
    private JTextField field1 = new JTextField();
    private JTextField field2 = new JTextField();
    private JTextField field3 = new JTextField();
    
    private JLabel lb1 = new JLabel(“Only DIGIT max 10”);    
    private JLabel lb2 = new JLabel(“Only LETTER max 10”);            
    private JLabel lb3 = new JLabel(“DIGIT AND LETTER max 10”);            
    public testing() throws HeadlessException {
        this.setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 170);
        field1.setBounds(10, 10, 180, 30);
        field2.setBounds(10, 50, 180, 30);
        field3.setBounds(10, 90, 180, 30);
        
        lb1.setBounds(190, 10, 180, 30);
        lb2.setBounds(190, 50, 180, 30);
        lb3.setBounds(190, 90, 180, 30);
        
        DocumentLimit doc1 = new DocumentLimit(10, DocumentLimit.ONLY_DIGIT);
        DocumentLimit doc2 = new DocumentLimit(10, DocumentLimit.ONLY_LETTER);
        DocumentLimit doc3 = new DocumentLimit(10, DocumentLimit.DIGIT_AND_LETTER_ONLY);
        field1.setDocument(doc1);
        field2.setDocument(doc2);
        field3.setDocument(doc3);
        getContentPane().add(field1);
        getContentPane().add(field2);
        getContentPane().add(field3);
        
        getContentPane().add(lb1);
        getContentPane().add(lb2);
        getContentPane().add(lb3);
     
    }
    
    public static void main(String[] args) {
        testing t = new testing();
        t.setLocation(100,100);
        t.setVisible(true);
    }
}

berikut adalah outputnya…..
selamat mencoba… 🙂 semoga bermanfaat….

About Administrator

2016-01-12 10:32:36 2016-01-12 14:33:42

Check Also

Mengatasi konflik Service ADB pada Android

Konflik pada service aplikasi sangat mungkin terjadi biasanya port service telah digunakan oleh aplikasi lain …

Tinggalkan Balasan

Translate »
error: Konten dilindungi !!