首页 > 解决方案 > Java:如何允许在 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);
             }
         }}});

标签: javaswinguser-interfacejtextfield

解决方案


要让文本字段接受数字输入,您应该使用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 完成验证输入的工作。


推荐阅读