2017-06-22 47 views
0

我認爲這很容易顯然我不瞭解DocumentListeners。我創建了一個JFormattedTextField擴展來包含一個偵聽器,以便我可以使用更改的字段文本更新哈希映射。從DocumentListener獲取已更改的文本

package stokerMonitor; 

import java.util.HashMap; 

import javax.swing.JFormattedTextField; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 

public class TimeLineTextClass extends JFormattedTextField { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

private HashMap<Integer,Object> fieldList; 
private int field; 

public TimeLineTextClass (Object tlformat_,HashMap<Integer,Object> fieldList_,int field_) { 
    super(tlformat_); 
    fieldList=fieldList_; 
    field=field_; 
    getDocument().addDocumentListener(new DocumentListener() { 

     @Override 
     public void changedUpdate(DocumentEvent e) { 
      // Ignore - Using plain document 

     } 

     @Override 
     public void insertUpdate(DocumentEvent e) { 
      fieldList.put(field,????); 
     } 

     @Override 
     public void removeUpdate(DocumentEvent e) { 
      fieldList.put(field,????); 
     } 

    }); 
} 

} 

通過文檔後,我無法弄清楚如何獲取事件處理程序中更改的文本。似乎沒有getText方法。我用什麼'????'? TIA。

回答

1

由於TimeLineTextClass延伸JFormattedField,你會發現實際上有一個getText()方法。

@Override 
    public void insertUpdate(DocumentEvent e) { 
     fieldList.put(field,getText()); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) { 
     fieldList.put(field,getText()); 
    } 

上面的代碼應該可以正常工作。

+0

啊!我一直試圖使用'this.getText()'或'e.something.getText()'。謝謝。 –

+0

不起作用的原因是因爲當您創建新的對象偵聽器時,由於範圍的原因,this將引用「DocumentListener」而不是「TimeLineText」類。 – DCON