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

Java 无法在jTextField中输入小数,因为限制输入字符,java,swing,jtextfield,Java,Swing,Jtextfield,我已限制用户在jTextField中输入字符,但不允许输入小数 char price = evt.getKeyChar(); if (!Character.isDigit(price) || (price == KeyEvent.VK_BACKSPACE) || (price == KeyEvent.VK_DELETE)) { evt.consume(); } 将此代码添

我已限制用户在
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 <代码>类,而不是<代码> JTraceField>代码>。您可以这样配置它:

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

@请再看一遍代码,我已经这样做了。这个代码不起作用。你可能忘记了&&前面的圆括号。它必须是这样的:如果((第一|第二|第三)和&(第四|第五){.在本例中,数字代表条件。此代码确实有效。好的,我会再次检查它。但现在我用jFormattedTextField进行了更改。它也起作用。谢谢。它起作用了。谢谢,所以我是否需要用
jFormattedTextField
替换
时间选择。查看它们。好的,非常感谢。