繁体   English   中英

摇摆:keyListener代码为“未知”

[英]Swing: keyListener codes are “unknown”

我在我的swing应用程序的TextField上放置了一个KeyListener ,以尝试一些功能。 目的是对TextField键入的每个键做出反应。 用户只应输入数字,但是如何输入,也可以输入字母字符。 因此,另外,我每次键入键后都要检查一次,如果整个东西都是数字,如果是,则用该数字做某事,如果不是,则在不退出程序的情况下告诉用户有错误。 所以我想做这样的事情:

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 与使用键侦听器相比,这三种方法都是更好的解决方案,因为它还涵盖了拖放,复制粘贴或您可以想到的将文本放入文本字​​段的任何其他机制。

我认为每次用户按下除整数以外的任何内容都会显示一条错误消息,这有点烦人。 检查此示例代码 ,该示例代码使用正则表达式匹配输入并具有仅接受数字的优点,其他任何内容都不会插入到文本字段中(通过覆盖insertString方法进行PlainDocument )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM