无法在jTextField中输入小数,原因是无法输入字符

时间:2018-12-31 13:22:01

标签: java swing jtextfield

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

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

将此代码添加到jTextFieldKyeTyped()事件后,它的确让我仅输入了数字,但没有输入小数。

如何摆脱它?

3 个答案:

答案 0 :(得分:1)

尝试使用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);
    }
}

答案 1 :(得分:0)

这应该有效:

 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();
            }

答案 2 :(得分:0)

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

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

(在此示例中,最小值= 0,最大值= 1000,步长= 0.01)