无法在 jTextField 中输入小数,因为限制输入字符

Unable to enter decimal in jTextField cause of restricted to enter character

我已限制用户在 jTextField 中输入字符,但不允许输入小数。

char price = evt.getKeyChar();
        if (!Character.isDigit(price)
                || (price == KeyEvent.VK_BACKSPACE)
                || (price == KeyEvent.VK_DELETE)) {
            evt.consume();
        }  

将此代码添加到 jTextFieldKyeTyped() 事件后,它确实让我只能输入数字,但不能输入小数。

如何摆脱它?

这应该有效:

 char price = evt.getKeyChar();
            if ((!Character.isDigit(price)
                    || (price == KeyEvent.VK_BACK_SPACE)
                    || (price == KeyEvent.VK_DELETE))
                    && (price!='.')){
                evt.consume();
            }
            if(price=='.'&&textField.getText().contains('.'+"")){
                evt.consume();
            }

如果您想将字段限制为数值,请考虑使用 JSpinner class 而不是 JTextField。您可以这样配置它:

JSpinner spinner = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 0.01));

(本例中最小值=0,最大值=1000,步长=0.01)

尝试使用 JFormattedField 而不是字符过滤。检查工作代码:

import javax.swing.*;
import javax.swing.text.InternationalFormatter;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Main {

    public static void main(String[] args) {

        NumberFormat format = DecimalFormat.getInstance();
        format.setMinimumFractionDigits(1);
        format.setMaximumFractionDigits(5);
        format.setRoundingMode(RoundingMode.HALF_UP);
        InternationalFormatter formatter = new InternationalFormatter(format);
        formatter.setAllowsInvalid(false);

        JFormattedTextField field = new JFormattedTextField(formatter);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(field);
        frame.setSize(200, 100);
        frame.setVisible(true);
    }
}