Может создать экземпляр типа DocumentListener - PullRequest
1 голос
/ 27 ноября 2011

Мне нужно сделать это: Value Change Listener на JTextField

Я пытаюсь найти решение Condemwnci, ​​но я получаю эту ошибку в строке: textField.getDocument().addDocumentListener(new DocumentListener() что в моем случае это: jtxtfBuscarInv.getDocument().addDocumentListener(new DocumentListener()

В моем случае я хочу обновить строки в Jtable, поэтому мой метод будет таким: ordenador.setRowFilter(RowFilter.regexFilter(jtxtfBuscarInv.getText(), 0));

Я нахожусь на Linux, Ubuntu 11.10, использую Eclipse, если это имеет значение.


Edit:

Я не понимаю, почему, но это работает следующим образом:

textField.getDocument().addDocumentListener(this);

, а затем переопределить методы реализации вместо того, чтобы делать все в одной строке.

1 Ответ

1 голос
/ 29 ноября 2011

Два подхода к добавлению DocumentListener должны быть фактически идентичными. В приведенном ниже примере перечислены все прослушиватели типа DocumentListener.class для каждого события. Очевидным является DocumentListeners, а анонимный внутренний класс имеет (зависящее от реализации) имя DocumentListeners$1. Оба реализуют интерфейс DocumentListener. Другие являются частью типичного обслуживания текстовых компонентов. Обратите внимание, что отображаются две копии, по одному от каждого слушателя.

Консоль

javax.swing.text.JTextComponent$InputMethodRequestsHandler@5090d8ea
DocumentListeners$1@559113f8
DocumentListeners[,0,0,128x38,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
javax.swing.plaf.basic.BasicTextUI$UpdateHandler@27b62aab
javax.swing.text.DefaultCaret$Handler@28ab54eb

javax.swing.text.JTextComponent$InputMethodRequestsHandler@5090d8ea
DocumentListeners$1@559113f8
DocumentListeners[,0,0,128x38,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
javax.swing.plaf.basic.BasicTextUI$UpdateHandler@27b62aab
javax.swing.text.DefaultCaret$Handler@28ab54eb

Код:

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();
            }
        });
    }
}
...