感谢您的时间。我想编写只接受double的文本字段。我有代码。这对Digit,Letter等很有用......但我是编程新手。所以我无法让它成为双倍。我想要允许这样的值:
10.25
1.345
等...
这是我很酷的代码:
private void priceInKeyTyped(java.awt.event.KeyEvent evt) {
char enter = evt.getKeyChar();
if(!(Character.isDigit(enter) ||(enter == KeyEvent.VK_BACKSPACE) || enter == KeyEvent.VK_DELETE)){
getToolkit().beep();
evt.consume();
}
}
我只想编辑此代码并制作我的程序。我的下一步很容易。
再次感谢您的时间。
答案 0 :(得分:0)
您可以尝试从字符串中解析double,如果发生错误,则表示字符串表示错误的double值。
public boolean isDouble(String value) {
try {
Double.parseDouble(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
答案 1 :(得分:0)
不是一遍又一遍地输入字符,而是尝试获取当前文本,并检查它是否与某个正则表达式匹配:
\d+((\.\d+)?)
。
\d+\.\d+
。
\
为前缀,因为只有一个常规点表示任何字符。要检查您的文本是否与正则表达式匹配,请使用:
String str = ...; //Get the text from the textbox
boolean isDouble = str.matches("Your regular expression here!");
注意:尝试将\
字符放入java中的字符串时,请键入\\
,以便\d+((\.\d+)?)
成为\\d+((\\.\\d+)?)
时输入java。
在您的代码中,在事件内部,而不是:
char enter = evt.getKeyChar();
if(!(Character.isDigit(enter) ||(enter == KeyEvent.VK_BACKSPACE) || enter == KeyEvent.VK_DELETE)){
getToolkit().beep();
evt.consume();
}
使用:
if(yourTextField.getText().matches("\\d+\\.\\d+")){
//Do whatever
}
编辑:此外,关于您的方法名称(Price_inKeyTyped
),我假设您不了解Java命名约定。
方法应该是动词,混合大小写,首字母小写,每个内部单词的首字母大写。
取自oracle - 点击here