我正在尝试限制多个 jtextfield 上的字符输入。这两个字段有不同的字符限制,同时它们不能接受空格作为第一个字符...例如,第一个字段只有 5 个字符限制,然后第二个字段有 10 个字符限制。我被困在这个问题上这是我正在使用的代码:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class Restriction {
public Restriction() {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Restriction();
}
});
}
private void initComponents() {
GridBagConstraints Cons = new GridBagConstraints();
JFrame frame = new JFrame();
JPanel panel = new JPanel(new GridBagLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField jtf = new JTextField(20);
JTextField jtf2 = new JTextField(20);
//add filter to document
((AbstractDocument) jtf.getDocument()).setDocumentFilter(new MyDocumentFilter());
MyDocumentFilter.charLimit(5);
((AbstractDocument) jtf2.getDocument()).setDocumentFilter(new MyDocumentFilter());
MyDocumentFilter.charLimit(10);
Cons.gridy = 0;
panel.add(jtf, Cons);
Cons.gridy = 1;
panel.add(jtf2,Cons);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
class MyDocumentFilter extends DocumentFilter {
static int Limit;
public static void charLimit(int Limitation){
Limit = Limitation;
}
@Override
public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException {
//we want standard behavior if we are not placing space at start of JTextField
//or if we are placing text at start of JTextField but first character is not whitespace
if ( i!=0 && i< Limit || ( i==0 && !Character.isWhitespace(string.charAt(0)) ) ){
super.replace(fb, i, i1, string, as);
}else{
System.out.println("no spaces allowed");
}
}
@Override
public void remove(FilterBypass fb, int i, int i1) throws BadLocationException {
super.remove(fb, i, i1);
}
@Override
public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException {
super.insertString(fb, i, string, as);
}
}