2013-05-18 69 views
3

我有我的課,我已經實現了DocumentListener如何從DocumentListener(DocumentEvent)獲取源對象?

public void removeUpdate(DocumentEvent arg0) { 
    System.out.println(arg0.getDocument()); 
} 

這將打印[email protected]

是否有任何可能的方式,我會得到的對象,所以我可以得到改變文本框的值?目前我只有一個領域,所以我不需要檢查,但如果我使用兩個或更多,我怎麼知道哪個JTextField已經通知了聽衆?

回答

5

我不確定可以從文檔中獲取擺動組件。但是這個問題很容易解決:只需向每個文本字段添加一個不同的偵聽器實例,並將該文本字段存儲在偵聽器本身中。

textField1.getDocument().addDocumentListener(new MyDocumentListener(textField1)); 
textField2.getDocument().addDocumentListener(new MyDocumentListener(textField2)); 
textField3.getDocument().addDocumentListener(new MyDocumentListener(textField3)); 
+1

是啊,我是知道的,我希望我可以讓我的代碼清潔,就像你可以在使用ActionListener的event.getSource()。謝謝你的回答。 – Nikola

+0

找到了很好的選擇嗎? –

0

你實際上得到了PlainDocument對象。只需將其存儲在變量中而不是打印出來。請參閱docs

2

一種選擇是使用內部類,它將爲您提供引用文本字段的機會。

final JTextField field = new JTextField(); 

field.getDocument().addDocumentListener(new DocumentListener() { 
    // Here you can reference 'field' in your methods 
}); 

如果您需要執行的每個文本字段相同的動作,JB Nizet's solution會更整潔。

0

你需要做的是將文檔listners每個組件是什麼,你need.If你真的需要知道哪些文本字段的文本已經改變,那麼你可以在一個DocumentListner財產textFieldName或東西,你可以在爲他們創建文檔列表器時進行設置。但我認爲你最好改變一下情況。它聽起來不太好。

0

您可能在不知情的情況下更新文檔。

請教javax.swing.event.DocumentEvent

這些方法與javax.swing.event.DocumentEvent.getDocument()檢索到的文檔結合使您可以以適當的方式更新文檔。稍後,您可以添加其他文本字段而不做任何更改。

爲了簡單地得到一個JTextField的文本變更後:

JTextField myTf = new ...; // maybe an attribute definition 
... 
myTf.addActionListener(
    new ActionListener(){@Override public void actionPerformed(ActionEvent e) { 
     JTextField tf = (JTextField)e.getSource(); 
     System.out.println(tf.getText()); 
     if(tf == myTf) { // == for reference comparison 
     ... // do something dedicated to myTf 
     } 
    }}); 
+0

我在這裏問過我的問題之前,我已經多次查看過文檔,但是我沒有看到getOffset()或getLenght()如何幫助我。我想在更改後獲取字段中的文本,而不是長度,因爲我將根據該字段進行搜索 – Nikola

+0

DocumentListener用於更復雜的操作,請參閱我的編輯 – Aubin