我知道我可以检查用户输入以匹配某些字符等,但有没有办法在用户输入时限制用户输入?
例如:用户按下键盘上的 8 键,但这不会回显,因为只有数字 1 - 4 是允许。当用户按下 3 时,它会回显并且程序继续进行。
这是否可以不使用库(我不允许使用)?
答案 0 :(得分:0)
这对我有用:
如果要限制可以输入的字符数,请执行以下操作:首先创建一个扩展PlainDocument并添加限制器的新类:
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class JTextFieldLimit extends PlainDocument { //Added limited textfield so you can only enter one char
private static final long serialVersionUID = 3452547874756361487L;
private int limit;
public JTextFieldLimit(int limit) {
super();
this.limit = limit;
}
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
if (str == null)
return;
if ((getLength() + str.length()) <= limit) {
super.insertString(offset, str, attr);
}
}
}
现在您可以创建一个新的文本字段并添加限制器
JTextField field = new JTextField(1); //1 stands for a maximum of 1 character allowed to be entered in this text field
field.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
//if that character is between 1 and 9 then continue, else make the systems beep sound
//so in your case, this should be 1 and 4
if (!((c >= '1') && (c <= '9') || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
getToolkit().beep();
e.consume();
}
}
});
希望这会有所帮助;)
(这是一个文本字段,但事件监听器可以添加到很多东西,全局监听器确实存在)