【问题标题】:Is there a way to ignore backspace key in java? [duplicate]有没有办法在java中忽略退格键? [复制]
【发布时间】:2017-12-12 20:09:13
【问题描述】:

每当我在文本框中按退格键时,就会触发此代码。

private void txtAgeKeyTyped(java.awt.event.KeyEvent evt) {                                
        char agetext= evt.getKeyChar();
        if(!(Character.isDigit(agetext))){
            evt.consume();
            JOptionPane.showMessageDialog(null,"Age is only written in Numbers!");
        }
}

只有当我输入字母而不是数字时才会触发它。

由于某种原因,每当我按下退格键时它都会触发。

有没有办法让我在不触发这段代码的情况下使用退格?

对不起,这是我第一次摆弄关键事件

【问题讨论】:

  • 是什么方法?为什么会触发?请在您的问题中添加一些详细信息!
  • 如果我想在文本框中使用退格键删除字符,则消息“年龄只写在数字中!”看来我在 Netbeans 中使用了 KeyTyped
  • @user3647634 那么退格键是否被视为数字?不它不是。这就是为什么您的 if 语句计算结果为 true 并且您会看到“age is only written in numbers!”。
  • @JonnyHenly 我认为 OP 已经知道这一点。这就是为什么他/她试图让退格键不触发该方法。

标签: java


【解决方案1】:

退格字符就是\b。如您所见,VK_BACK_SPACE 常量的定义如下:

public static final int VK_BACK_SPACE     = '\b';

常量在java.awt.event.KeyEvent 类中定义。如果您使用 IntelliJ,它将自动为您静态导入。

您可以检查agetext 是否为\b。如果是,则从方法中返回:

private void txtAgeKeyTyped(java.awt.event.KeyEvent evt) {   
    char agetext= evt.getKeyChar();
    if (agetext == VK_BACK_SPACE) return;
    if(!(Character.isDigit(agetext))){
        evt.consume();
        JOptionPane.showMessageDialog(null,"Age is only written in Numbers!");
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 2021-05-21
  • 2016-07-01
  • 2020-07-02
  • 2016-12-27
相关资源
最近更新 更多