如何忽略Swing中的按键事件?

时间:2011-11-29 18:33:38

标签: java swing keyevent

我想让文本字段只接受来自用户的数字和退格按钮。

我添加了用于检查用户密钥的功能,但如果密钥不是数字,我不知道如何停止按键事件。

我需要在函数中添加什么代码才能停止事件?

 private void jTextField2KeyPressed(java.awt.event.KeyEvent evt)   
 {                                       

   if(!((evt.getKeyCode()==8) || (evt.getKeyCode()>48 && evt.getKeyCode()<57)))
   {
      //how to stop the key pressed event
   }
 }

6 个答案:

答案 0 :(得分:7)

您不需要使用Swing事件处理来实现此目的。

最好的方法是使用JFormattedTextField。

有关详细信息,请参阅Java教程:

http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html

答案 1 :(得分:4)

尝试覆盖keyTyped

@Override
public void keyTyped(KeyEvent evt) {
    if (!Character.isDigit(evt.getKeyChar()) && !(evt.getKeyCode() == KeyEvent.VK_BACK_SPACE)) {
        evt.consume();
    }
}

<强>更新

如果您希望粘贴不起作用并强制输入要输入的内容,可以使用以下内容。

@Override
public void keyPressed(KeyEvent evt) {
    if(evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_V) {
        evt.consume();
    }
}

答案 2 :(得分:2)

设置文本字段DocumentFilter的{​​{1}} 样品:

PlainDocument

答案 3 :(得分:0)

我建议您查看是否可以使用keyPressed,KeyReleased和KeyTyped事件,看看它们是否阻止密钥到达您的程序。

您的程序可能只关注一种类型的关键事件,但您需要找出它是哪一个并使用这些事件。

答案 4 :(得分:0)

您可以尝试以下方法:

    private void txtDisplayKeyTyped(java.awt.event.KeyEvent evt) {                                          


    boolean valid = false; //some condition here
    if(!valid) evt.consume();
}

答案 5 :(得分:-2)

请参阅Limit TextField input to numeric value - 我认为这正是您所寻找的。

我认为你的代码不起作用的原因是因为if语句不正确并且实际上并不捕获非数字键代码。虽然,我不确定,因为我自己没有看到或测试过您的代码,所以如果你真的想要你可以做一些调整,但说实话,这里发布的解决方案将是最简单的。