2011-09-01 71 views
8

我的程序中有一個jFormattedTextField,當jFormattedTextField值被有效更改時,我需要更新jLabel的文本。
其實jFormattedTextField獲取一個數字,jLabel顯示這個數字和另一個數字之間的差異。
我目前通過聽jFormatted文本的「FocusLost」事件來做到這一點。在jFormattedTextField上放置「On Change」偵聽器

我該怎麼做?

回答

10

註冊屬性「值」一個PropertyChangeListener formattedField

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()。因此,您可能還需要檢查聽衆中的有效號碼。