keyEvents不适用于jTextField

时间:2015-02-03 14:59:36

标签: java user-interface

当我按下键盘上的向上和向下箭头键时,我试图更改jTextField中的值。当按下UP时,该值上升一个设定量,当按下DOWN时,它会下降。

这是我到目前为止:

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

    try{
    int code = evt.getKeyCode();
    double value = Double.parseDouble(engineTxt.getText());
    if (code == KeyEvent.VK_UP) {
        value = value + 25.00;
        if ((value) > 100.00) {
            value = 100.00;
            engineTxt.setText(String.format("%.2f", value));
        }
    }
    else if(code == KeyEvent.VK_DOWN){
        value = value - 25.00;
        if ((value) < 0.00) {
            value = 0.00;
            engineTxt.setText(String.format("%.2f", value));
        }
    }
    } catch(Exception e){
        System.out.println("error");
    }
}  

在我把try / catch放在那里之前,我得到的错误是:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "0,00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)

对于许多行,列表一直向下,基本上它会在整个过程中使用解析和格式标记任何内容。

问题是我对另外10个TextFields进行相同的解析并且没有问题,但这是唯一一个带有keyEvent的问题。添加try / catch后,每按一次键,我都会收到sout()消息,程序的其余部分继续正常。

1 个答案:

答案 0 :(得分:0)

当你走到界限时:

double value = Double.parseDouble(engineTxt.getText());

字符串engineTxt.getText()返回(String) 0,00,这会引发错误。

虽然

double value = Double.parseDouble("0");
System.out.println(value);

不会引发异常,

double value = Double.parseDouble("0,00");
System.out.println(value);

确实

沿着这条线的某个地方,有一个不应该存在的,。 由于这将起作用:

double value = Double.parseDouble("0.05");
System.out.println(value);

修改

  

就像有人在评论中说的那样,虽然OP没有意识到这一点,但它是parseDouble in Java results to NumberFormatException

可能的副本