Java netbeans-仅接受双精度文本字段

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

谢谢你抽出时间。我想对只接受双精度的文本字段进行编码。我有密码。这对数字、字母等很有效。。。但我对编程还不熟悉。所以我不能只花两倍的钱。我确实希望允许这样的值:

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();
    }
}
我只想编辑这个代码,使我的程序。我的下一步将很容易完成


再次感谢您抽出时间

您可以尝试从字符串解析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+表示一个或多个数字,和。是一个点(在正则表达式中,它必须以
      \
      作为前缀,因为只有一个普通点意味着任何字符
要检查文本是否与正则表达式匹配,请使用:

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
}