最初の文字として空白を受け入れないように jtextfield を制限しようとしています。私のコードはすでに最初の入力を空白として受け入れないように jtextfield を制限していますが、文字を入力してからそれを消去すると、空白を受け入れないというフィールドの制限が機能していません。
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() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField Field = new JTextField();
//add filter to document
((AbstractDocument) Field.getDocument()).setDocumentFilter(new MyDocumentFilter());
frame.add(Field);
frame.pack();
frame.setVisible(true);
}
}
class MyDocumentFilter extends DocumentFilter {
int z=0;
@Override
public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException {
for (int n = string.length(); n > 0; n--) {//an inserted string may be more than a single character i.e a copy and paste of 'aaa123d', also we iterate from the back as super.XX implementation will put last insterted string first and so on thus 'aa123d' would be 'daa', but because we iterate from the back its 'aad' like we want
char c = string.charAt(n - 1);//get a single character of the string
System.out.println(c);
if(z==0){//for first character
if (Character.isAlphabetic(c)) {//if its an alphabetic character or white space
super.replace(fb, i, i1, String.valueOf(c), as);//allow update to take place for the given character
z++;
} else {//it was not an alphabetic character or white space
System.out.println("Not allowed");
}
}
else if(z!=0){
if (Character.isAlphabetic(c) || c == ' ' || Character.isDigit(c)) {//if its an alphabetic character or white space
super.replace(fb, i, i1, String.valueOf(c), as);//allow update to take place for the given character
z++;
} else {//it was not an alphabetic character or white space
System.out.println("Not 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);
}
}