Java: 如何允许在 JTextField 中按下退格键
Java: how to allow backspace being pressed in JTextField
我制作了一个 JTextField 来限制输入的字符,除非是数字、字母 "e" 或逗号。但现在我意识到它限制了按下退格键。我该如何改变它?我将添加代码,检查按下的是什么键,下面
for (JTextField tf : listOfFields)
{
String value = tf.getText();
int n = value.length();
if (ke.getKeyChar()>= '0' && ke.getKeyChar() <= '9' || ke.getKeyChar() == ','|| ke.getKeyChar() == 'e')
{
tf.setEditable(true);
}
else
{
tf.setEditable(false);
}
}}});
如果你真的想坚持这种过滤方式,假设ke是一个KeyEvent,测试键码而不是键字符:添加这个条件
|| ke.getKeyCode() == KeyEvent.VK_BACK_SPACE
要让文本字段接受数字输入,您应该使用 JFormattedTextField:
JFormattedTextField field = new JFormattedTextField(
NumberFormat.getIntegerInstance());
field.setColumns(12);
要使其既检查本地化数字格式(使用逗号的格式)又检查 java.lang 语法(如 1e5
),您可以创建一个 NumberFormatter 来同时执行这两种格式:
NumberFormatter formatter = new NumberFormatter() {
@Override
public Object stringToValue(String text)
throws ParseException {
try {
return Double.valueOf(text);
} catch (NumberFormatException ne) {
return super.stringToValue(text);
}
}
};
JFormattedTextField field = new JFormattedTextField(formatter);
field.setColumns(12);
可以使用 getValue
方法检索每个字段的值:
for (JFormattedTextField tf : listOfFields) {
Number value = (Number) tf.getValue();
// ...
}
限制用户键入的键不是保证数字输入的正确方法。例如,您的代码将允许用户键入 123,4,45,678
.
有许多允许编辑的键。 Home、End、Delete 和 Ctrl-A 只是其中的一部分。您不应该尝试使用击键白名单来明确地容纳它们。让 JFormattedTextField 完成验证输入的工作。
我制作了一个 JTextField 来限制输入的字符,除非是数字、字母 "e" 或逗号。但现在我意识到它限制了按下退格键。我该如何改变它?我将添加代码,检查按下的是什么键,下面
for (JTextField tf : listOfFields)
{
String value = tf.getText();
int n = value.length();
if (ke.getKeyChar()>= '0' && ke.getKeyChar() <= '9' || ke.getKeyChar() == ','|| ke.getKeyChar() == 'e')
{
tf.setEditable(true);
}
else
{
tf.setEditable(false);
}
}}});
如果你真的想坚持这种过滤方式,假设ke是一个KeyEvent,测试键码而不是键字符:添加这个条件
|| ke.getKeyCode() == KeyEvent.VK_BACK_SPACE
要让文本字段接受数字输入,您应该使用 JFormattedTextField:
JFormattedTextField field = new JFormattedTextField(
NumberFormat.getIntegerInstance());
field.setColumns(12);
要使其既检查本地化数字格式(使用逗号的格式)又检查 java.lang 语法(如 1e5
),您可以创建一个 NumberFormatter 来同时执行这两种格式:
NumberFormatter formatter = new NumberFormatter() {
@Override
public Object stringToValue(String text)
throws ParseException {
try {
return Double.valueOf(text);
} catch (NumberFormatException ne) {
return super.stringToValue(text);
}
}
};
JFormattedTextField field = new JFormattedTextField(formatter);
field.setColumns(12);
可以使用 getValue
方法检索每个字段的值:
for (JFormattedTextField tf : listOfFields) {
Number value = (Number) tf.getValue();
// ...
}
限制用户键入的键不是保证数字输入的正确方法。例如,您的代码将允许用户键入 123,4,45,678
.
有许多允许编辑的键。 Home、End、Delete 和 Ctrl-A 只是其中的一部分。您不应该尝试使用击键白名单来明确地容纳它们。让 JFormattedTextField 完成验证输入的工作。