bruce said:
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, AttributeSet 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();
}
});
}
}