The DocumentValidator and DocumentTransformer system don't work worth a

damn if you have a non-zero minimum value because you're fucked by not
being able to enter, for example, "1" because it's below the minimum value
even if you wanted to keep typing "100" which may be valid.

So instead we don't enforce the minimum value with the validator/
transformer combo and instead make sure we're at the minimum when we lose
focus. It's not perfect but there is no perfect solution when we're trying
to predict human intention.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@1353 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2003-12-15 18:56:27 +00:00
parent ad865c7172
commit fa344463a2
@@ -1,8 +1,10 @@
//
// $Id: IntField.java,v 1.4 2003/11/25 17:54:50 eric Exp $
// $Id: IntField.java,v 1.5 2003/12/15 18:56:27 mdb Exp $
package com.samskivert.swing;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JTextField;
import com.samskivert.Log;
@@ -15,7 +17,8 @@ import com.samskivert.swing.util.SwingUtil;
* specified range.
*/
public class IntField extends JTextField
implements SwingUtil.DocumentValidator, SwingUtil.DocumentTransformer
implements SwingUtil.DocumentValidator, SwingUtil.DocumentTransformer,
FocusListener
{
public IntField ()
{
@@ -32,8 +35,9 @@ public class IntField extends JTextField
setHorizontalAlignment(JTextField.RIGHT);
setColumns(5);
// register ourselves as the validator
// register ourselves as the validator and focus listener
SwingUtil.setDocumentHelpers(this, this, null);
addFocusListener(this);
}
/**
@@ -92,13 +96,24 @@ public class IntField extends JTextField
try {
int value = Integer.parseInt(text);
return ((value >= _minValue) && (value <= _maxValue));
return (value <= _maxValue);
} catch (NumberFormatException nfe) {
return false;
}
}
// documentation inherited from interface
public void focusGained (FocusEvent e)
{
}
// documentation inherited from interface
public void focusLost (FocusEvent e)
{
// here we ensure that we're not below our minimum
setText(transform(getText()));
}
protected int _minValue;
protected int _maxValue;
}