我想補充說changedUpdate方法不會觸發純文本文檔的通知。如果您使用純文本文本組件,則必須使用insertUpdate和/或removeUpdate。
如果用戶正在編輯組合框,最近我不得不使用文檔偵聽器來禁用/啓用按鈕。我做了這樣的事情和工作得非常好:
public class MyDocumentListener implements DocumentListener
{
@Override
public void insertUpdate(DocumentEvent e)
{
setChanged();
notifyObservers(true);
}
@Override
public void removeUpdate(DocumentEvent e)
{
setChanged();
notifyObservers(false);
}
@Override
public void changedUpdate(DocumentEvent e)
{
// Not used when document is plain text
}
}
然後,我添加了這個監聽到組合框是這樣的:
((JTextComponent) combobox.getEditor().getEditorComponent())
.getDocument().addDocumentListener(new MyDocumentListener());
這工作,因爲與組合框相關聯的文檔是純文本。當我使用changedUpdate時,它沒有。
我喜歡這樣的問題。 Swing是一個有趣的框架,正確使用它往往不知道一系列奇怪的,但可行的,黑客。 :) –