当前位置: 首页 > 知识库问答 >
问题:

数字和小数点的jTextField验证?

祁嘉瑞
2023-03-14

我需要设置一个jTextField,只接受数字和一个小数点。没别的了。小数点不能输入多次,并且不允许输入其他字符。我该怎么做?

我输入了这个代码。但效果不好。我的意思是它接受字符串,直到我输入小数点

    if (!Character.isDigit(evt.getKeyChar()) & crqty.getText().indexOf(".") != -1) {
        evt.consume();
    }

共有3个答案

董弘新
2023-03-14

您可以对JTextField进行简单的验证。。。。

JTextField.addKeyListener(new java.awt.event.KeyAdapter() {
  public void keyTyped(java.awt.event.KeyEvent evt) {

    char text[];
        int count = 0; 
        text = JTextField.getText().toCharArray();
        for(int i = 0 ; i< text.length ; i++){
            if(text[i] == '.'){
                count++;
            }
        }
        if(count>=1 && evt.getKeyChar() == '.'){
            evt.consume();
        }

  }
});
缪志新
2023-03-14

问得好!我很久以前下载了这个代码(我不记得是哪个网站了),它只允许你输入一个数字:

import java.awt.Color;
import javax.swing.JTextField;
import javax.swing.text.*;

public class JNumericField extends JTextField {
    private static final long serialVersionUID = 1L;

    private static final char DOT = '.';
    private static final char NEGATIVE = '-';
    private static final String BLANK = "";
    private static final int DEF_PRECISION = 2;

    public static final int NUMERIC = 2;
    public static final int DECIMAL = 3;

    public static final String FM_NUMERIC = "0123456789";
    public static final String FM_DECIMAL = FM_NUMERIC + DOT; 

    private int maxLength = 0;
    private int format = NUMERIC;
    private String negativeChars = BLANK;
    private String allowedChars = null;
    private boolean allowNegative = false;
    private int precision = 0;

    protected PlainDocument numberFieldFilter;

    public JNumericField() {

        this(2, DECIMAL);
    }

    public JNumericField(int iMaxLen) {
        this(iMaxLen, NUMERIC);
    }

    public JNumericField(int iMaxLen, int iFormat) {
        setAllowNegative(true);
        setMaxLength(iMaxLen);
        setFormat(iFormat);

        numberFieldFilter = new JNumberFieldFilter();
        super.setDocument(numberFieldFilter);
    }

    public void setMaxLength(int maxLen) {
        if (maxLen > 0)
            maxLength = maxLen;
        else
            maxLength = 0;
    }

    public int getMaxLength() {
        return maxLength;
    }

    public void setEnabled(boolean enable) {
        super.setEnabled(enable);

        if (enable) {
            setBackground(Color.white);
            setForeground(Color.black);
        } else {
            setBackground(Color.lightGray);
            setForeground(Color.darkGray);
        }
    }

    public void setEditable(boolean enable) {
        super.setEditable(enable);

        if (enable) {
            setBackground(Color.white);
            setForeground(Color.black);
        } else {
            setBackground(Color.lightGray);
            setForeground(Color.darkGray);
        }
    }

    public void setPrecision(int iPrecision) {
        if (format == NUMERIC)
            return;

        if (iPrecision >= 0)
            precision = iPrecision;
        else
            precision = DEF_PRECISION;
    }

    public int getPrecision() {
        return precision;
    }

    public Number getNumber() {
        Number number = null;
        if (format == NUMERIC)
            number = new Integer(getText());
        else
            number = new Double(getText());

        return number;
    }

    public void setNumber(Number value) {
        setText(String.valueOf(value));
    }

    public int getInt() {
        return Integer.parseInt(getText());
    }

    public void setInt(int value) {
        setText(String.valueOf(value));
    }

    public float getFloat() {
        return (new Float(getText())).floatValue();
    }

    public void setFloat(float value) {
        setText(String.valueOf(value));
    }

    public double getDouble() {
        return (new Double(getText())).doubleValue();
    }

    public void setDouble(double value) {
        setText(String.valueOf(value));
    }

    public int getFormat() {
        return format;
    }

    public void setFormat(int iFormat) {
        switch (iFormat) {
        case NUMERIC:
        default:
            format = NUMERIC;
            precision = 0;
            allowedChars = FM_NUMERIC;
            break;

        case DECIMAL:
            format = DECIMAL;
            precision = DEF_PRECISION;
            allowedChars = FM_DECIMAL;
            break;
        }
    }

    public void setAllowNegative(boolean b) {
        allowNegative = b;

        if (b)
            negativeChars = "" + NEGATIVE;
        else
            negativeChars = BLANK;
    }

    public boolean isAllowNegative() {
        return allowNegative;
    }

    public void setDocument(Document document) {
    }

    class JNumberFieldFilter extends PlainDocument {
        private static final long serialVersionUID = 1L;

        public JNumberFieldFilter() {
            super();
        }

        public void insertString(int offset, String str, AttributeSet attr)
                throws BadLocationException {
            String text = getText(0, offset) + str
                    + getText(offset, (getLength() - offset));

            if (str == null || text == null)
                return;

            for (int i = 0; i < str.length(); i++) {
                if ((allowedChars + negativeChars).indexOf(str.charAt(i)) == -1)
                    return;
            }

            int precisionLength = 0, dotLength = 0, minusLength = 0;
            int textLength = text.length();

            try {
                if (format == NUMERIC) {
                    if (!((text.equals(negativeChars)) && (text.length() == 1)))
                        new Long(text);
                } else if (format == DECIMAL) {
                    if (!((text.equals(negativeChars)) && (text.length() == 1))) 
                        new Double(text);

                    int dotIndex = text.indexOf(DOT);
                    if (dotIndex != -1) {
                        dotLength = 1;
                        precisionLength = textLength - dotIndex - dotLength;

                        if (precisionLength > precision)
                            return;
                    }
                }
            } catch (Exception ex) {
                return;
            }

            if (text.startsWith("" + NEGATIVE)) {
                if (!allowNegative)
                    return;
                else
                    minusLength = 1;
            }

            if (maxLength < (textLength - dotLength - precisionLength - minusLength))
                return;

            super.insertString(offset, str, attr);
        }
    }
}

你可以这样使用它:

JNumericField numField = new JNumericField();

numField.setMaxLength(10); //Set maximum length             
numField.setPrecision(1); //Set precision (1 in your case)              
numField.setAllowNegative(true); //Set false to disable negatives
翟聪
2023-03-14

您似乎正在使用KeyListener来管理JTextField中的KeyEvents。这不适合筛选此JTextComponent的文档。在这里,您可以使用JFormattedTextFieldMaskFormatter组合,以接受最多8位小数点分隔的数字。

JFormattedTextField textField = new JFormattedTextField();
MaskFormatter dateMask = new MaskFormatter("####.####");
dateMask.install(textField);

要获得更自由的格式输入(例如更多数字),可以使用DocumentFilterJTextField。下面是一个整数过滤器示例

 类似资料:
  • 我希望我的文本字段只接受数字(数字)和一个点,因为这是一个用户可以在其中写入产品价格的字段。我有这个代码,但它不能很好地工作,它只接受数字和删除。 有人能帮我修一下吗?

  • \这是JTextField的创建: 这是我的DocumentFilter: 这会自动从JTextField中删除所有字母和字符。 然而,我想知道是否有人知道有一个地方的所有命令都类似于“\D”。我花了一段时间才找到正确的信息。 另外,我现在的代码也可以防止。当我和替身一起工作时,我需要的那种类型。有什么想法吗? 谢谢!我今天学到了这么多,真是太神奇了。我已经连续编码了13个小时。

  • 问题内容: 我似乎在使用浮点数时失去了很多精度。 例如,我需要求解一个矩阵: 这是我用来从文本文件导入矩阵的代码: 我需要使用gauss-seidel进行求解,因此需要重新排列x,y和z的方程式: 这是我用来重新排列方程式的代码。是系数矩阵,是答案向量: 但是,我得到的答案并不精确到小数位。 例如,从上面重新排列第二个方程式后,我应该得到: 我得到的是: 这看起来似乎不是一个大问题,但是当您将数字

  • 当用户输入时,是否可以在数字输入上添加小数点? 我有以下输入: 我已尝试设置输入。值并将其包装在格式化程序中。format(),使用以下命令,但我得到一个解析错误。因为$sign和它是一个数字输入,我猜。 有办法这么做吗?

  • 本文向大家介绍JS验证 只能输入小数点,数字,负数的实现方法,包括了JS验证 只能输入小数点,数字,负数的实现方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上就是小编为大家带来的JS验证 只能输入小数点,数字,负数的实现方法全部内容了,希望大家多多支持呐喊教程~

  • 问题内容: 我是angularjs的新手。我想知道什么是只允许在文本框中键入有效数字的方法。例如,用户可以键入“ 1.25”,但不能键入“ 1.a”或“ 1 ..”。当用户尝试输入下一个将使它成为无效数字的字符时,他将无法输入。 提前致谢。 问题答案: 您可以尝试使用此指令来阻止将任何无效字符输入到输入字段中。( 更新 :这依赖于对模型具有明确知识的指令,这对于可重用性而言并不理想,请参见下面的可