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) {
}
}
}
}