java - JFormattedTextField: 格式化文本到没有空格的数字

标签 java swing jformattedtextfield

JFormattedTextField 有一个小问题:我想保存和检索从 1000 到 65535 的数字。但是当我从 JFormattedTextField 检索值 (7000) 时,它有一个空格,如 7 000,当我将值解析为 Integer (Integer.parseInt(formattedTextField.getText())) 时,它失败了。

java.lang.NumberFormatException: For input string: "7 000"

如果我用 MaskFormatter().setMask("#####") 这样做没问题,但我想用 NumberFormatter().

如何在没有附加空间的情况下设置 JFormattedTextField

    NumberFormatter nfsoc   = new NumberFormatter();
    nfsoc.setMaximum(Short.MAX_VALUE*2 - 1);
    nfsoc.setMinimum(1);
    nfsoc.setAllowsInvalid(false);

    formattedTextField      = new JFormattedTextField(nfsoc);

    formattedTextField.setText("7000");      

    int socket              = Integer.parseInt(formattedTextField.getText()) 
    //java.lang.NumberFormatException: For input string: "7 000"

我希望 Integer.parseInt(tfServerSocket.getText()) 的输出是 7000,但实际输出是 //java.lang.NumberFormatException: For input string: "7 000"

最佳答案

有两种解析整数的方法。

  • NumberFormatter 使用本地化的 NumberFormat,这意味着它会根据您的语言环境(国家/地区)进行格式化和解析。
  • Integer.parseInt 不关心语言环境。它总是期望使用 Java 源代码使用的相同格式的数字,即“[±]ddd…”(所有 ASCII 数字,可选地在前面加上一个符号)。

使用 getValue() JFormattedTextField 的方法。它专门用于执行您正在尝试执行的操作:获取 JFormattedTextField 的值。

它还有一个优势,那就是它可以让您的代码在所有语言环境中工作,而不仅仅是您的语言环境。例如,在美国,您的示例值写为 7,000。在德国,它写成 7.000。

Number socketValue = (Number) formattedTextField.getValue();
if (socketValue == null) {
    JOptionPane.showMessageDialog(
        formattedTextField.getTopLevelAncestor(),
        "A valid port valid is required.",
        "Cannot create connection",
        JOptionPane.ERROR_MESSAGE);
    return;
}

int socket = socketValue.intValue();

关于java - JFormattedTextField: 格式化文本到没有空格的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57708696/

相关文章:

java - java.lang.NullPointerException,我不知道出了什么问题

java - 如何访问外部类的公共(public)方法以便在 JPanel 上重绘?

java - 无法在 JWindow 中的 JPanel 中编辑 JTextField 的文本

java - 如何将 "formatted double(String)"转换为 double?

java - 使用 Java 在 Spark Data Frame 中添加空值列

java - Android Wifi 响应太慢

java - 试图让 JFormattedtextfield 改变......不工作

java - 使用计时器增加 JTextField 中的值

java - 如何在优先级队列中实现正确的排序算法?

java - 使用 JApplet 调用paintComponent