我使用此代码来限制数字的输入,但如果我按下的第一个键是一个字母,代码让我输入那个字母,只有一次,然后当我擦除它我不能再输入字母,什么代码有问题吗?我想只输入数字。
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();
}
}
});
答案 0 :(得分:3)
"不是(A或B)"与"(不是A)和(不是B)"相同。
您的情况相当于:
if ((Character.isDigit(c)
&& c == KeyEvent.VK_BACK_SPACE
&& c == KeyEvent.VK_DELETE))
|| cantBannosTxt.getText().length() >= 2)
当您输入两个字母时,OR的第一部分失败,但第二部分评估为true
。由于false || true
为true
,因此将消费您输入的内容。
我将留下它来构建新的验证 - 与&&
结合使用时,请注意逻辑||
和!
。