keyEvents 不适用于 jTextField
keyEvents not working for jTextField
我试图在按下键盘上的向上和向下箭头键时更改 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 个 TextField 进行了相同的解析并且没有问题,但这是唯一一个具有 keyEvent 的。添加 try/catch 后,每次按下一个键时我都会收到 sout() 消息,程序的其余部分继续正常运行。
当你到达线时:
double value = Double.parseDouble(engineTxt.getText());
字符串 engineTxt.getText()
returns (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);
编辑:
Like someone said in the comments, while the OP is not aware of it, it is a Possible duplicate of parseDouble in Java results to NumberFormatException
我试图在按下键盘上的向上和向下箭头键时更改 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 个 TextField 进行了相同的解析并且没有问题,但这是唯一一个具有 keyEvent 的。添加 try/catch 后,每次按下一个键时我都会收到 sout() 消息,程序的其余部分继续正常运行。
当你到达线时:
double value = Double.parseDouble(engineTxt.getText());
字符串 engineTxt.getText()
returns (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);
编辑:
Like someone said in the comments, while the OP is not aware of it, it is a Possible duplicate of parseDouble in Java results to NumberFormatException