限制用户输入

时间:2014-01-07 13:00:46

标签: java limit user-input

我知道我可以检查用户输入以匹配某些字符等,但有没有办法在用户输入时限制用户输入?

例如:用户按下键盘上的 8 键,但这不会回显,因为只有数字 1 - 4 是允许。当用户按下 3 时,它会回显并且程序继续进行。

这是否可以不使用库(我不允许使用)?

1 个答案:

答案 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();
        }
    }
});

希望这会有所帮助;)

(这是一个文本字段,但事件监听器可以添加到很多东西,全局监听器确实存在)