仅接受Java TextField中的数字和点

Agu*_*tín 8 java swing numbers filter textfield

我有一个textField,我只接受键盘上的数字,但现在我必须更改它,因为它是一个"价格textField",我还需要接受一个点"." 对于任何类型的价格.

我怎样才能改变这个以获得我需要的东西?

ptoMinimoField = new JTextField();
        ptoMinimoField.setBounds(348, 177, 167, 20);
        contentPanel.add(ptoMinimoField);
        ptoMinimoField.setColumns(10);
        ptoMinimoField.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char caracter = e.getKeyChar();
                if (((caracter < '0') || (caracter > '9'))
                        && (caracter != '\b')) {
                    e.consume();
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

Sur*_*tta 11

正如Oracle所建议的那样,使用格式化文本字段

格式化文本字段为开发人员提供了一种指定可在文本字段中键入的有效字符集的方法.

amountFormat = NumberFormat.getNumberInstance();
...
amountField = new JFormattedTextField(amountFormat);
amountField.setValue(new Double(amount));
amountField.setColumns(10);
amountField.addPropertyChangeListener("value", this);
Run Code Online (Sandbox Code Playgroud)


小智 6

我只是使用try- catch块:

try {// if is number
    Integer.parseInt(String);
} catch (NumberFormatException e) {
    // else then do blah
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为 OP 想要接受数字和点。如果输入是 1.2 或类似的,`Integer.parseInt` 将抛出一个 `NumberFormatException` (3认同)

Wen*_*der 6

JTextField txField = new DoubleJTextField();

创建一个DoubleJTextField.java文件,并开心

public class DoubleJTextField extends JTextField {
    public DoubleJTextField(){
        addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char ch = e.getKeyChar();

                if (!isNumber(ch) && !isValidSignal(ch) && !validatePoint(ch)  && ch != '\b') {
                    e.consume();
                }
            }
        });

    }

    private boolean isNumber(char ch){
        return ch >= '0' && ch <= '9';
    }

    private boolean isValidSignal(char ch){
        if( (getText() == null || "".equals(getText().trim()) ) && ch == '-'){
            return true;
        }

        return false;
    }

    private boolean validatePoint(char ch){
        if(ch != '.'){
            return false;
        }

        if(getText() == null || "".equals(getText().trim())){
            setText("0.");
            return false;
        }else if("-".equals(getText())){
            setText("-0.");
        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)