Java netbeans-仅接受双精度文本字段
谢谢你抽出时间。我想对只接受双精度的文本字段进行编码。我有密码。这对数字、字母等很有效。。。但我对编程还不熟悉。所以我不能只花两倍的钱。我确实希望允许这样的值: 10.25 1.345 等等 这是我的酷代码:Java netbeans-仅接受双精度文本字段,java,netbeans,special-characters,jtextfield,Java,Netbeans,Special Characters,Jtextfield,谢谢你抽出时间。我想对只接受双精度的文本字段进行编码。我有密码。这对数字、字母等很有效。。。但我对编程还不熟悉。所以我不能只花两倍的钱。我确实希望允许这样的值: 10.25 1.345 等等 这是我的酷代码: private void priceInKeyTyped(java.awt.event.KeyEvent evt) { char enter = evt.getKeyChar(); if(!(Character.isDigit(enter) ||(enter == KeyEvent
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();
}
}
我只想编辑这个代码,使我的程序。我的下一步将很容易完成
再次感谢您抽出时间 您可以尝试从字符串解析double,如果出现错误,则表示字符串代表错误的double值
public boolean isDouble(String value) {
try {
Double.parseDouble(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
不要一次又一次地输入字符,而是尝试获取当前文本,并检查它是否匹配某个正则表达式:
- 如果您试图捕获整数和双精度,请使用
。\d+(\.\d+)
- \d+表示您正在匹配一个或多个数字,(\。\d+)表示一个点后跟一个或多个数字。问号表示它是可选的
- 如果您试图仅捕获双精度,请使用
。\d+\.\d+
- \d+表示一个或多个数字,和。是一个点(在正则表达式中,它必须以
作为前缀,因为只有一个普通点意味着任何字符\
- \d+表示一个或多个数字,和。是一个点(在正则表达式中,它必须以
String str = ...; //Get the text from the textbox
boolean isDouble = str.matches("Your regular expression here!");
注意:在java中尝试将\
字符放入字符串时,请键入\
,这样\d+(\.\d+)
在java中键入时变为\\d+(\\.\\d+)
在代码中,在事件内部,而不是:
char enter = evt.getKeyChar();
if(!(Character.isDigit(enter) ||(enter == KeyEvent.VK_BACKSPACE) || enter == KeyEvent.VK_DELETE)){
getToolkit().beep();
evt.consume();
}
使用:
EDIT:另外,关于方法的名称(Price\u inKeyTyped
),我假设您不知道java命名约定
方法应该是动词,混合大小写,第一个字母小写,每个内部单词的第一个字母大写
摘自oracle-单击反复解析双倍比检查常规数据需要更多的时间和内存expression@Oldmax补充。尽管我不是真的喜欢用勺子喂食,所以在你复制和粘贴之前,请试着真正理解我写的东西。希望我能帮上忙!谢谢你,Nonamel,是的,我是java新手。我是通过你的评论学习。是的,你的代码是有效的。但问题是它允许字符串。我不需要在我的文本字段中输入字母。你的代码允许这样的输入:2.aaa,b.90等。我只需要这样:50.25,10.75,1.50完全一样:Rs.1.50,1.50美元等。希望你能理解。我用这个文本字段在数据库中存储一些价格e、 我的界面允许双值。这是我想要的。请看这个:就是这样。谢谢你的时间。希望你能解决它。
if(yourTextField.getText().matches("\\d+\\.\\d+")){
//Do whatever
}