2011-11-27 49 views
1

我需要這樣做:Value Change Listener to JTextField可以實例類型的DocumentListener

我想Condemwnci的解決方案,但我得到這個錯誤在該行: textField.getDocument().addDocumentListener(new DocumentListener() ,在我的情況是: jtxtfBuscarInv.getDocument().addDocumentListener(new DocumentListener()

在我來說,我想在一個JTable更新行,所以我的方法是這樣的: ordenador.setRowFilter(RowFilter.regexFilter(jtxtfBuscarInv.getText(), 0));

我在Linux,Ubuntu的11.10,使用Eclipse如果該事項。


編輯:

我不明白爲什麼,但它在明​​年的工作方式:

textField.getDocument().addDocumentListener(this); 

,然後overrride的工具方法,而不是做都在同一行。

回答

1

添加DocumentListener的兩種方法應該完全相同。以下示例列出了全部類型爲DocumentListener.class的收聽者。顯而易見的是DocumentListeners本身,而anonymous inner class具有(實施相關)名稱DocumentListeners$1。兩者都實現DocumentListener接口。其他人是典型文本組件維護的一部分。請注意,顯示兩個副本,每個偵聽器添加一個副本。

控制檯:

 
[email protected]8ea 
[email protected] 
DocumentListeners[,0,0,128x38,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] 
[email protected] 
[email protected] 

[email protected]8ea 
[email protected] 
DocumentListeners[,0,0,128x38,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] 
[email protected] 
[email protected] 

代碼:

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 
import javax.swing.text.AbstractDocument; 

/** @see http://stackoverflow.com/questions/8283067 */ 
public class DocumentListeners extends JPanel implements DocumentListener { 

    JTextField jtf = new JTextField("StackOverflow!"); 

    public DocumentListeners() { 
     this.add(jtf); 
     jtf.getDocument().addDocumentListener(this); 
     jtf.getDocument().addDocumentListener(new DocumentListener() { 

      @Override 
      public void insertUpdate(DocumentEvent e) { 
       print(e); 
      } 

      @Override 
      public void removeUpdate(DocumentEvent e) { 
       print(e); 
      } 

      @Override 
      public void changedUpdate(DocumentEvent e) { 
       print(e); 
      } 
     }); 
    } 

    private void print(DocumentEvent e) { 
     AbstractDocument ad = (AbstractDocument) jtf.getDocument(); 
     for (DocumentListener dl : ad.getListeners(DocumentListener.class)) { 
      System.out.println(dl); 
     } 
    } 

    @Override 
    public void insertUpdate(DocumentEvent e) { 
     print(e); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) { 
     print(e); 
    } 

    @Override 
    public void changedUpdate(DocumentEvent e) { 
     print(e); 
    } 

    private void display() { 
     JFrame f = new JFrame("DocumentListeners"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new DocumentListeners().display(); 
      } 
     }); 
    } 
}