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/