Membuat JTextValidator, TextComponent yang Dapat Melakukan Proses Validasi Secara Dinamis


Java Programming

Java Programming

Peralatan yang digunakan :

  1. Java Development Kit 1.6
  2. NetBeans IDE 6.9

Tutorial – tutorial sebelumnya saya telah membuat artikel tentang cara melakukan proses validasi dalam JTextField. Namun ternyata banyak temen-temen yang menemukan masalah, diantarnya adalah :

  1. Harus melakukan coding yang sama untuk proses validasi setiap JTextField, artinya 1 JTextField 1 coding, artinya 10 JTextField, kita harus melakukan coding 10 kali juga
  2. Jika ada 10 TextField yang ada di Form dan semuanya ingin dilakukan validasi yang sama, tetap harus melakukan proses coding, dan tidak bisa dilakukan 1 kali coding untuk beberapa JTextField
  3. Saat user mamasukkan data yang salah, maka otomatir JTextField tidak menerima, namun user tidak mengetahui kenapa hal itu terjadi karena tidak ada proses pemberitahuan kepada user.
  4. Dan lain-lain….

Jadi kesimpulannya, bagaimana caranya membangun sebuah komponen JTextField yang dapat melakukan proses validasi secara berbeda artinya dinamis dan bagaimana cara melakukan proses peringatan kepada user saat data yang dimasukkan tidak valid? 😀

Dan hal itulah yang sekarang akan kita bahas 😀

  1. Buatlah sebuah Java Class Library di NetBeans, saya anjurkan NetBeans karena nanti pada artikel selanjutnya, saya akan bahas tentang kemudahan jika menggunakan NetBeans 😀 Beri nama project tersebut dengan nama khannedy-jtextvalidator, terserah apa yang anda inginkan 😀
  2. Setelah itu, saatnya membuat coding, pertama buatlah kelas ValidatorEvent, kelas ini nanti yang akan kita jadikan sebuah Event saat proses validasi terjadi baik itu Event saat tidak valid ataupun Event saat valid 😀
    /**
     * Copyright 2010 Eko Kurniawan Khannedy
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package khannedy.javax.swing;
    
    import java.util.EventObject;
    
    /**
     * Event Object untuk ValidatorListener
     * @author echo
     */
    public class ValidatorEvent extends EventObject {
    
        private static final long serialVersionUID = 1L;
        private String text;
    
        public String getText() {
            return text;
        }
    
        public ValidatorEvent(String text, DocumentValidator validator) {
            super(validator);
            this.text = text;
        }
    }
    
    
  3. Buatlah sebuah kelas ValidatorListener, kelas ini nanti akan kita gunakan untuk trigger saat proses validasi terjadi, yaitu trigger saat data valid ataupun trigger saat data tidak valid 😀
    /**
     * Copyright 2010 Eko Kurniawan Khannedy
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package khannedy.javax.swing;
    
    import java.util.EventListener;
    
    /**
     * Kelas ValidatorListener merupakan kelas yang digunakan untuk mendengarkan proses
     * validasi dari kelas Validator.
     *
     * @author Eko Kurniawan Khannedy
     */
    public interface ValidatorListener extends EventListener {
    
        /**
         * Metode ini dipanggil saat data yang dimasukkan ke JTextField tidak valid
         * @param event event validator
         */
        void onInvalid(ValidatorEvent event);
    
        /**
         * Metode ini dipanggil saat data yang dimasukkan ke JTextFiel valid
         * @param event event validator
         */
        void onValid(ValidatorEvent event);
    }
    
    
  4. Setelah membuat Listener dan Event, saatnya membuat interface Validator, dimana dalam interface inilah kita nanti akan melakukan proses Validasi.
    /**
     * Copyright 2010 Eko Kurniawan Khannedy
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package khannedy.javax.swing;
    
    /**
     * Interface Validator merupakan interface yang digunakan untuk melakukan
     * proses validasi terhadap data yang akan dimasukkan ke JTextField
     *
     * @author Eko Kurniawan Khannedy
     */
    public interface Validator {
    
        /**
         * Metode ini digunakan untuk melakukan proses validasi
         * @param input data yang akan divalidasi
         * @return true jika valid dan false jika tidak valid
         */
        boolean validate(String input);
    }
    
    
  5. Buat kelas DocumentValidator, kelas ini merupakan kelas turunan dari kelas PlainDocument yang kita gunakan sebagai Model untuk JTextField, dan dalam DocumentValidator inilah kita melakukan proses validasi.
    /**
     * Copyright 2010 Eko Kurniawan Khannedy
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package khannedy.javax.swing;
    
    import javax.swing.event.EventListenerList;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
    
    /**
     * DocumentListener merupakan Document yand digunakan oleh komponen JTextValidator
     *
     * @author Eko Kurniawan Khannedy
     */
    public class DocumentValidator extends PlainDocument {
    
        private static final long serialVersionUID = 1L;
        private EventListenerList list = new EventListenerList();
        private Validator validator;
    
        /**
         * Metode ini digunakan untuk mendapatkan Validator
         * @return Validator yang digunakan
         */
        public Validator getValidator() {
            return validator;
        }
    
        /**
         * Metode ini digunakan untuk mengubah Validator
         * @param validator Validator yang baru
         */
        public void setValidator(Validator validator) {
            this.validator = validator;
        }
    
        /**
         * Metode ini digunakan untuk menambahkan Listener untuk proses validasi
         * @param listener Listener yang akan ditambahkan
         */
        public void addValidatorListener(ValidatorListener listener) {
            list.<ValidatorListener>add(ValidatorListener.class, listener);
        }
    
        /**
         * Metode ini digunakan untuk menghapus Listener yang telah ada
         * @param listener Listener yang akan dihapus
         */
        public void removeValidatorListener(ValidatorListener listener) {
            list.<ValidatorListener>remove(ValidatorListener.class, listener);
        }
    
        /**
         * Metode ini digunakan untuk memberi peringatan ke Listener bahwa
         * data yang dimasukkan tidak valid
         * @param event event validator
         */
        protected void fireOnInvalid(ValidatorEvent event) {
            for (ValidatorListener listener : list.getListeners(ValidatorListener.class)) {
                listener.onInvalid(event);
            }
        }
    
        /**
         * Metode ini digunakan untuk memberi peringatan ke Listener bahwa
         * data yang dimasukkan valid
         * @param event event validator
         */
        protected void fireOnValid(ValidatorEvent event) {
            for (ValidatorListener listener : list.getListeners(ValidatorListener.class)) {
                listener.onInvalid(event);
            }
        }
    
        @Override
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            // cek apakah validator null
            if (validator == null) {
                // jika null maka tidak ada proses validasi
                super.insertString(offs, str, a);
            } else {
                // jika tidak null maka lakukan proses validasi
                if (validator.validate(str)) {
                    // jika valid
                    super.insertString(offs, str, a);
                    // beritahu listener bahwa data valid
                    fireOnValid(new ValidatorEvent(str, this));
                } else {
                    // jika tidak valid, beri tahu listener bahwa data tidak valid
                    fireOnInvalid(new ValidatorEvent(str, this));
                }
            }
        }
    }
    
    
  6. Terakhir baru kita buat komponennya, misal disini saya menyebutknya dengan sebuth JTextValidator, terserah anda akan menamainya apa 😀
    /**
     * Copyright 2010 Eko Kurniawan Khannedy
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package khannedy.javax.swing;
    
    import javax.swing.JTextField;
    
    /**
     * Kelas TextValidator merupakan komponen Swing yang memiliki fitur untuk melakukan
     * proses validasi.
     *
     * @author Eko Kurniawan Khannedy
     */
    public class JTextValidator extends JTextField {
    
        private static final long serialVersionUID = 1L;
        private DocumentValidator documentValidator;
    
        public JTextValidator() {
            setDocumentValidator(new DocumentValidator());
        }
    
        public DocumentValidator getDocumentValidator() {
            return documentValidator;
        }
    
        public void setDocumentValidator(DocumentValidator documentValidator) {
            this.documentValidator = documentValidator;
            setDocument(documentValidator);
        }
    
        /**
         * Metode ini digunakan untuk mengubah Validator
         * @param validator Validator baru
         */
        public void setValidator(Validator validator) {
            getDocumentValidator().setValidator(validator);
        }
    
        /**
         * Metode ini digunakan untuk mendapatkan Validator
         * @return Validator yang digunakan
         */
        public Validator getValidator() {
            return getDocumentValidator().getValidator();
        }
    
        /**
         * Metode ini digunakan untuk menambahkan Listener untuk proses Validasi
         * @param listener Listener yang akan ditambahkan
         */
        public void removeValidatorListener(ValidatorListener listener) {
            getDocumentValidator().removeValidatorListener(listener);
        }
    
        /**
         * Metode ini digunakan untuk menghapus Listener yang telah ditambahkan
         * @param listener Listener yang akan dihapus
         */
        public void addValidatorListener(ValidatorListener listener) {
            getDocumentValidator().addValidatorListener(listener);
        }
    }
    
    
  7. Untuk menggunakan JTextValidator, caranya cukup mudah, tinggal anda menambahkannya ke JFrame, setelah itu ubah kelas Validatornya dengan menggunakan metode setValidator() dan jika anda akan memberi aksi saat data yang dimasukkan tidak valid, maka anda hanya perlu menambahkan ValidatorListener, untuk lebihjelasnya pada artikel selanjutnya saya akan bahas penggunaannya di NetBeans 😀 Kenapa NetBeans y? Lihat saya pada artikel selanjutnya 😀

Download Projectnya disini

see you… 😀

Iklan

3 pemikiran pada “Membuat JTextValidator, TextComponent yang Dapat Melakukan Proses Validasi Secara Dinamis

  1. Terimakasih saya cuma penganggur yang sekedar punya pc buat nyari mamfaat ternyata disini saya dapat ilmu sangat berharga dan gratis yang konek internet. Pastinya hanya tuhan yang bisa membalas kebaikannya orang seperti anda. Netbeans saya baru v6.7

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s