java - Swing:keyListener 代码为 "unknown"

标签 java swing jtextfield keylistener

我在 swing 应用程序的 TextField 上放置了一个 KeyListener 来尝试一些功能。目标是对 TextField 中输入的每个键使用react。用户应该只输入数字,但事实上,也可以输入字母字符。因此,另外我必须在每次键入按键后检查整个内容是否是一个数字,如果是,则用该数字进行一些操作,如果不是,则告诉用户有错误而不退出程序。所以我想做这样的事情:

String enteredNumPlayers = "";

JTextField textfieldNumPlayers = new JTextField();
textfieldNumPlayers.setBounds(/*some values*/);
textfieldNumPlayers.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.DARK_GRAY));
textfieldNumPlayers.setHorizontalAlignment(JTextField.CENTER);
textfieldNumPlayers.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
        if(e.getKeyChar()!=/*Code of the back key*/){
            enteredNumPlayers += e.getKeyChar();
            System.out.println(e);
        }else{
            enteredNumPlayers = enteredNumPlayers.substring(0, s1.length()-1);
        }

        try{
            Integer.parseInt(enteredNumPlayers);
            // do something with that number
        }catch (NumberFormatException err){
            new ErrorDialog("Not a number"); // my own method to allude user
        }   
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub

    }
});

现在我想通过 keyTyped(...) 方法中的 System.out.println(e) 来查看后退键的具体代码是什么,但打印出以下内容:

java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unbekannt keyCode: 0x0,keyChar=Rücktaste,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on (...)

为什么每个键值或代码 = 0 或未知?不应该是ascii值吗?使用“Rücktaste”也会很丑陋,因为在英语工作计算机上这个值会有所不同,不是吗?那么我怎样才能干净地检查输入的键是否是后退键呢?

同样的情况也发生在其他角色上,只不过他们的 keyChar 是正确的。

最佳答案

您正在寻找的是 DocumentFilterDocumentListenerJFormattedTextField。与使用关键监听器相比,这三个方法都是更好的解决方案,因为它还涵盖拖放、复制粘贴或您可以想到的将文本放入文本字​​段的任何其他机制。

关于java - Swing:keyListener 代码为 "unknown",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12874480/

相关文章:

java - 如何从另一个 JtextField 更新 JTextField

java - 检测用户何时关闭 float 工具栏框架

java - JButton Action 监听器问题。字段中显示的 slider 值

java - 将 "any"类类型传递到 java 方法中

java - JMockit:如何根据构造函数中给出的参数来模拟方法?

java - 使用 JGit - Bare Repo 提交并推送到 GitHub?

java - 如何在 Java 中设置文本框的高度和宽度?

java - 为什么java中的html不起作用?

java - 我可以根据比例缩放ValueAxis吗?

java - 如何让JTextField自动聚焦?