Java Swing:keyListener代码为;“未知”;

Java Swing:keyListener代码为;“未知”;,java,swing,jtextfield,keylistener,Java,Swing,Jtextfield,Keylistener,我在swing应用程序的TextField上放置了一个KeyListener,以尝试一些功能。目标是对在TextField中键入的每个键做出反应。用户应该只输入数字,但如何输入数字,也可以输入字母字符。另外,每次键入一个键后,我都要检查,如果整个东西都是一个数字,如果是,用这个数字做一些东西,如果不是,告诉用户有错误,而不退出程序。所以我想这样做: String enteredNumPlayers = ""; JTextField textfieldNumPlayers = new JText

我在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)来查看back键的具体代码,但是下面的代码会被打印出来:

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”也会很难看,因为在一台运行英语的计算机上,这个值会有所不同,不是吗?那么,我如何才能清楚地检查键入的键是否是back键呢


其他字符也会发生同样的情况,只是它们的keyChar是正确的。

您要查找的是
文档过滤器
文档监听器
JFormattedTextField
。这三种方法都是比使用键侦听器更好的解决方案,因为它还包括拖放、复制粘贴或任何您可以想到的将文本放入文本字段的其他机制。

您要寻找的是
文档过滤器
文档侦听器
格式文本字段
。这三种方法都是比使用按键侦听器更好的解决方案,因为它还包括拖放、复制粘贴或任何其他可以想到的将文本放入文本字段的机制。

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

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

但我必须对每个新附加的单个数字做出反应,这可能吗?就像我输入一个1->用那个1做点什么,只要我再输入一个1->用11做点什么。所以我想你的意思是我总是取写在文本字段中的整数,而不是“构建”数字?是否可能(我认为使用JFormattedTextField)只允许数字输入?但我必须对每个新附加的单个数字做出反应,这可能吗?就像我输入一个1->用那个1做点什么,只要我再输入一个1->用11做点什么。所以我想你的意思是我总是取写在文本字段中的整数,而不是“构建”数字?有没有可能(我想使用JFormattedTextField)只允许数字输入?希望这可以帮助您完成这个主题,或者这可以帮助您完成这个主题