Re: Text Field Max Characters
On Oct 9, 11:29 pm, "John B. Matthews" <nos...@nospam.invalid> wrote:
In article
<683f43c0-6f81-423c-aa7d-99d39c81d...@n16g2000vbg.googlegroups.com>,
bruce <bruc...@bellsouth.net> wrote:
Is there any way to set the maximum number of characters a text field
can accept? I used setColumns() and then I used validate(). Didn't
seem to have any effect.
These would affect the field's view; you want to limit the number of
characters permitted in the field's model.
The only other idea I had was to capture the keystrokes and then test
the input for the string length I want to limit the field to. In my
case, that would be overkill!!!!
It seems straightforward; here's an <http://sscce.org/>:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/** @author John B. Matthews */
public class ShortDocumentTest extends JPanel {
private static final int MAX = 8;
public ShortDocumentTest() {
this.add(new JTextField(new ShortDocument(), "12345678", =
MAX));
}
private static final class ShortDocument extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeS=
et a)
throws BadLocationException {
if (this.getLength() + str.length() <= MAX) {
super.insertString(offs, str, a);
}
}
}
private void display() {
JFrame f = new JFrame("ShortDocumentTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ShortDocumentTest().display();
}
});
}
}
Thanks for the suggestion. I "Sort Of" understand what you have done.
I'm going to try to convert it to my specific case. I think the meat
of your example is in the "insertString" which I will need to convert
to a keystroke, I think. This is one place my "newbie" is showing up..
I'll play around with it.
Thanks again for the response...
Bruce