9

キーボードからの数字のみを受け入れる te​​xtField が 1 つありますが、これは "price 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();
                }
            }
        });
4

14 に答える 14

15

オラクルが提案するように、フォーマットされたテキストフィールドを使用してください

書式設定されたテキスト フィールドは、開発者がテキスト フィールドに入力できる有効な文字セットを指定する方法を提供します。

amountFormat = NumberFormat.getNumberInstance();
...
amountField = new JFormattedTextField(amountFormat);
amountField.setValue(new Double(amount));
amountField.setColumns(10);
amountField.addPropertyChangeListener("value", this);
于 2013-08-06T15:16:35.930 に答える
7

try-catchブロックを使用するだけです:

try {// if is number
    Integer.parseInt(String);
} catch (NumberFormatException e) {
    // else then do blah
}
于 2014-09-06T09:23:51.463 に答える
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;
    }
}
于 2015-04-21T12:19:31.203 に答える
2

JTextFieldJavaでの倍数を入力してください

private boolean dot = false;
private void txtMarkKeyTyped(java.awt.event.KeyEvent evt) {                                 
    char vChar = evt.getKeyChar();
    if (txtMark.getText().equals(""))
        dot = false;
    if (dot == false){
        if (vChar == '.') dot = true;
        else if (!(Character.isDigit(vChar)
                || (vChar == KeyEvent.VK_BACK_SPACE)
                || (vChar == KeyEvent.VK_DELETE))) {
                evt.consume();
        }
    } else {
        if (!(Character.isDigit(vChar)
                || (vChar == KeyEvent.VK_BACK_SPACE)
                || (vChar == KeyEvent.VK_DELETE))) {
                evt.consume();
        }
    }
}
于 2015-04-16T18:50:38.467 に答える
2

JFormattedTextField を見たことがありますか? それはあなたが望むことをするようです。

于 2013-08-06T15:16:23.577 に答える
0

数字とドットだけで入力されたキーをフィルタリングするのに役立つかもしれません

public void filterHanyaAngkaDot(java.awt.event.KeyEvent evt){
      char c = evt.getKeyChar();
      if (! ((Character.isDigit(c) ||
              (c == KeyEvent.VK_BACK_SPACE) ||
              (c == KeyEvent.VK_DELETE))
              )&& c==KeyEvent.VK_COMMA
              )
      {
          evt.consume();
      }
 }
于 2016-08-16T08:09:51.957 に答える
-1

私はこのソリューションを使用しています。シンプルで効率的です。

                jtextfield.addKeyListener(new KeyAdapter() {
                public void keyTyped(KeyEvent e) {
                    char vChar = e.getKeyChar();
                    if (!(Character.isDigit(vChar)
                            || (vChar == KeyEvent.VK_BACK_SPACE)
                            || (vChar == KeyEvent.VK_DELETE))) {
                        e.consume();
                    }
                }
            });
于 2013-12-01T15:38:26.777 に答える