netbeans - Textfield只接受双打

时间:2016-01-22 19:42:47

标签: java netbeans special-characters jtextfield

感谢您的时间。我想编写只接受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();
    }
}

我只想编辑此代码并制作我的程序。我的下一步很容易。

再次感谢您的时间。

2 个答案:

答案 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 +)表示一个点后跟一个或多个数字。问号意味着它是可选的。
  • 如果您尝试仅捕获双打,请使用\d+\.\d+
    • \ d +表示1位或更多位数,和。是一个点(在正则表达式中,它必须以\为前缀,因为只有一个常规点表示任何字符。

要检查您的文本是否与正则表达式匹配,请使用:

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