On 4/5/2012 5:48 AM, Mark Sudau wrote:
> I already thought of a KeyListener but using a KeyListener makes it
> difficult to validate the length of a regular expression.
A key listener is probably the wrong direction entirely. For length,
make a Document and set the text field's document to that, or use a
document listener, or use a DocumentFilter.
Something like (untested):
DocumentFilter filter = new DocumentFilter() {
private final int MAX_LEN = 42;
public void insertString( FilterBypass fb,
int offset, String string, AttributeSet att )
{
if( fb.getDocument().getLength() + string.getLength()
< MAX_LEN )
{
fb.insertString( offset, string, attr );
}
}
public void replaceString( FilterBypass fb,
int offset, String string, AttributeSet att )
{
fb.replaceString( offset, string, attr );
}
};
In general, use the validators that Java already provides, don't roll
your own.
<http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html>
(You have to scroll down a bit to get to the part about validating
input. It's there though, honest.)
Other links:
<http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html>
<http://docs.oracle.com/javase/7/docs/api/javax/swing/InputVerifier.html>
<http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html>
PlainDocument is an AbstractDocument that you could easily extend. I
think PlainDocument is the model used for all plain text fields in Swing
as well as the unformatted (plain) text areas.
<http://docs.oracle.com/javase/7/docs/api/javax/swing/text/PlainDocument.html>
|