2011-09-01 5 views
8

私のプログラムにjFormattedTextFieldがあり、jFormattedTextFieldの値が有効に変更されたときにjLabelのテキストを更新する必要があります。
実際にjFormattedTextFieldは数値を取得し、jLabelはこの数値と別の数値との差異を表示します。
私は現在、jFormattedテキストの "FocusLost"イベントをlistenすることによってこれを行います。jFormattedTextFieldに "On Change"リスナーを設定する

どうすればいいですか?

答えて

10

formattedField

にプロパティ「値」のためにPropertyChangeListenerを登録
PropertyChangeListener l = new PropertyChangeListener() { 

     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      String text = evt.getNewValue() != null ? evt.getNewValue().toString() : ""; 
      label.setText(evt.getNewValue()); 
     } 
    }; 
    formattedTextField.addPropertyChangeListener("value", l); 

はDocumentListenerものFocusListenerを使用しないでください:(解析が起こったの前に、すべてのkeyTypedに上)前者はあまりにも頻繁に通知され、後者は脆すぎます。

1

これを行う最も簡単な方法は、テキストフィールドにアタッチするjavax.swing.event.DocumentListenerを使用することです。次に、ユーザーがタイプすると、ラベルを更新することができます。

正確なシーケンスは覚えていませんが、リスナーのinsertUpdate()は、書式設定されたテキストフィールドを検証する前に呼び出すことができます。したがって、リスナー内の有効な番号もチェックする必要があります。

関連する問題