5

私はこのように使用JFormattedTextFieldNumberFormatました:

JFormattedTextField-参照を作成する

JFormattedTextField integerField;

NumberFormat-参照を作成する

NumberFormat integerFieldFormatter;

-コンストラクターで:

integerFieldFormatter = NumberFormat.getIntegerInstance();
integerFieldFormatter.setMaximumFractionDigits(0);

integerField = new JFormattedTextField(integerFieldFormatter );
integerField.setColumns(5);

..........

整数のみで使用するつもりでしたが、 1500 のような数値を入力すると、フォーカスが 1,500 に失われた後に変換され、スローされた例外はその最初の行です。

スレッド「AWT-EventQueue-0」での例外 java.lang.NumberFormatException: 入力文字列の場合:「1,500」

JTextField通常受け入れられるすべての整数の代わりに使用するとJFormattedTextField、しかし、使用したい理由JFormattedTextFieldは、その入力制限の利点を利用するためです。

4

4 に答える 4

1

私は自分の問題の解決策を発見しました。ここにあります:

正確な問題は、を使用するJFormattedTextFieldNumberFormat、JFormattedTextFieldが次の3桁の前にコンマ「、」を追加することです。

1000は1,000としてレンダリングされます

10000が10,000としてレンダリング

1000000は1,000,000としてレンダリングされます

JFormattedTextFieldから整数値を読み取ると、このコード行を使用します

  int intValue = Integer.parseInt(integerField.getText());

カンマは文字列の一部として読み取られます。1000は1,000として読み取られ、この文字列値は整数値に変換できないため、例外がスローされます。

正直なところ、解決策はこの回答にありますが、ここで繰り返します

使用するstr.replaceAll(",","")

 int intValue = Integer.parseInt(integerField.getText().replaceAll(",", ""));

これにより、返された文字列のカンマ文字が置き換え','られ、通常どおりに変換さintれます。

よろしく

于 2013-01-23T06:36:46.510 に答える
0

(少なくとも)2つの方法でそれを行うことができます:

  • キーリスナーの使用
  • DocumentFilter の使用

KeyListener を使用する場合:

KeyListener listener = new KeyAdapter(){
    public void keyTyped(KeyEvent e){
        if(e.getKeyCode()<KeyEvent.VK_0||e.getKeyCode()>KeyEvent.VK_9{//input<'0' or input>'9'?
            e.consume();//delete the typed char
        }
    }
}

yourTextField.addKeyListener(listener);

DocumentFilter を使用するには、このリンクを確認してください: jTextField に数字のみを導入できるようにするには?

編集:これを言うのを忘れていました。MadProgrammer がこの回答への最初のコメントで述べたように、KeyListener は適切な方法ではありません。

KeyListeners にイベントが通知される順序がわからず、キーが到達する前に既にテキスト コンポーネントに移動している可能性があります (または、到達する前に消費された可能性があります)。

編集#2:別の簡単な方法

MaskFormatter formatter = new MaskFormatter("#####");
JFormattedTextField field = new JFormattedTextField(formatter);

そして、トリックを行う必要があります。これにより、ツアー テキスト フィールドに最大 5 桁まで挿入できます。フォーマッタの文字列パラメータに「#」を追加すると、ユーザーはさらに多くの桁を入力できます。

于 2013-01-22T21:04:26.467 に答える