package jas.util; import java.awt.TextField; import java.awt.event.TextEvent; import java.awt.event.TextListener; import java.lang.reflect.Constructor; import javax.swing.JOptionPane; class TextFieldBinding extends FieldBinding implements TextListener { TextFieldBinding(TextField field, byte flags) { this(field); m_flags = flags; } TextFieldBinding(TextField field) { m_field = field; field.addTextListener(this); } void set(Object value) { String x; if (value == null) x = ""; else if (value instanceof String) x = (String) value; else x = value.toString(); if (!m_oldVal.equals(x)) { m_field.setText(x); m_oldVal = x; } } Object get(Class type) throws UnsupportedType { Object result = null; String x = m_field.getText(); if (type.isPrimitive()) { if (type == Double.TYPE ) return new Double(x); if (type == Integer.TYPE) return new Integer(x); throw new UnsupportedType(m_field,type); } else { Class[] strarg = { x.getClass() }; try { Constructor c = type.getConstructor(strarg); Object[] args = { x }; result = c.newInstance(args); } catch (Exception xx) { throw new UnsupportedType(m_field,type); } } return result; } public void textValueChanged(TextEvent e) { String x = m_field.getText(); if (!x.equals(m_oldVal)) setChanged(); notifyObservers(); } protected void reset() { super.reset(); m_oldVal = m_field.getText(); } boolean hasValidInput() { String value = m_field.getText(); if ((m_flags & MUST_BE_NUMBER) != 0) { try { double d = (m_flags & MUST_BE_INTEGER) != 0 ? (double) Integer.parseInt(value) : Double.valueOf(value).doubleValue(); if ((m_flags & MUST_BE_POSITIVE) != 0 && d <= 0.0) { JOptionPane.showMessageDialog(Application.getApplication().getFrame(), value.concat(" is invalid input; value must be positive."), "Error", JOptionPane.ERROR_MESSAGE); return false; } } catch (NumberFormatException e) { JOptionPane.showMessageDialog(Application.getApplication().getFrame(), value +" is invalid input; value must be a"+ ((m_flags & MUST_BE_INTEGER) != 0 ? "n integer." : " number."), "Error", JOptionPane.ERROR_MESSAGE); return false; } } return true; } private String m_oldVal = ""; private TextField m_field; private byte m_flags = 0; public static final byte MUST_BE_NUMBER = 1; public static final byte MUST_BE_INTEGER = 2; public static final byte MUST_BE_POSITIVE = 4; }