ValidationTestFrame.java Source code

Java tutorial

Introduction

Here is the source code for ValidationTestFrame.java

Source

import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

public class ValidationTestFrame extends JFrame implements DocumentListener {
    JLabel label = new JLabel("I only accept numbers");
    private IntTextField intFiled;

    public ValidationTestFrame() {
        setTitle("ValidationTest");
        setSize(300, 200);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        Container contentPane = getContentPane();

        JPanel p = new JPanel();
        intFiled = new IntTextField(12, 3);
        p.add(intFiled);
        intFiled.getDocument().addDocumentListener(this);

        contentPane.add(p, "South");
        contentPane.add(label, "Center");
    }

    public void insertUpdate(DocumentEvent e) {
        setLabel();
    }

    public void removeUpdate(DocumentEvent e) {
        setLabel();
    }

    public void changedUpdate(DocumentEvent e) {
    }

    public void setLabel() {
        if (intFiled.isValid()) {
            int value = intFiled.getValue();
            label.setText(Integer.toString(value));
        }
    }

    public static void main(String[] args) {
        JFrame frame = new ValidationTestFrame();
        frame.show();
    }

}

class IntTextField extends JTextField {
    public IntTextField(int defval, int size) {
        super("" + defval, size);
    }

    protected Document createDefaultModel() {
        return new IntTextDocument();
    }

    public boolean isValid() {
        try {
            Integer.parseInt(getText());
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    public int getValue() {
        try {
            return Integer.parseInt(getText());
        } catch (NumberFormatException e) {
            return 0;
        }
    }

    class IntTextDocument extends PlainDocument {
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            if (str == null)
                return;
            String oldString = getText(0, getLength());
            String newString = oldString.substring(0, offs) + str + oldString.substring(offs);
            try {
                Integer.parseInt(newString + "0");
                super.insertString(offs, str, a);
            } catch (NumberFormatException e) {
            }
        }
    }

}