KeyTyped事件 - 为什么我可以输入一个字符但是当我删除时我不能再输入了?

时间:2015-11-26 07:19:49

标签: java swing

我使用此代码来限制数字的输入,但如果我按下的第一个键是一个字母,代码让我输入那个字母,只有一次,然后当我擦除它我不能再输入字母,什么代码有问题吗?我想只输入数字。

amount.addKeyListener(new KeyAdapter() {
        public void keyTyped(KeyEvent e) {
            char c = e.getKeyChar();
            if (!(Character.isDigit(c)
                    || (c == KeyEvent.VK_BACK_SPACE)
                    || (c == KeyEvent.VK_DELETE))
                    || (amount.getText().length() >= 2)) {
                e.consume();
            }
        }
    }); 

1 个答案:

答案 0 :(得分:3)

由于De Morgan's laws

  

"不是(A或B)"与"(不是A)和(不是B)"相同。

您的情况相当于:

if ((Character.isDigit(c) 
    && c == KeyEvent.VK_BACK_SPACE
    && c == KeyEvent.VK_DELETE)) 
    || cantBannosTxt.getText().length() >= 2)

当您输入两个字母时,OR的第一部分失败,但第二部分评估为true。由于false || truetrue,因此消费您输入的内容。

我将留下它来构建新的验证 - 与&&结合使用时,请注意逻辑||!