Пусть ActionListener прослушивает изменения в JTextField, а не только вводит?

Как вы знаете, если у вас есть текстовое поле и вы добавляете к нему ActionListener, он будет слушать только нажатие клавиши кнопки enter. Однако я хочу, чтобы мой ActionListener слушал изменения в тексте. Так что в основном у меня есть это:

    public static JPanel mainPanel() { 
    JPanel mainp = new JPanel(); 
    JTextArea areap = new JTextArea("Some text in the textarea"); 
    JTextField fieldp = new JTextField("Edit this"); 
    areap.setEditable(false); 
    fieldp.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
             if(//change in textfield, for instance a letterpress or space bar)
                   { 
                        //Do this
                   } 
        }
    });
    mainp.add(areap);
    mainp.add(fieldp); 
    return mainp;
}

любым способом я могу слушать изменения в тексте (например, документированные в событии actionPerformed)?

3 ответов


из ответа @JRL


используйте базовый документ:

myTextField.getDocument().addDocumentListener();

да, но что такое прослушиватель документов и как его использовать? Ты на самом деле не отвечаешь на вопрос.

У меня есть JTextField в пользовательском интерфейсе моего приложения. Когда пользователь вносит какие-либо изменения в него, я хочу, чтобы был проверен близлежащий JCheckBox. Цель состоит в том, чтобы сообщить приложению использовать введенное значение. Пользователи часто вводят там значение, но если они явно не говорят приложению использовать его, приложение продолжает игнорировать его. Вместо "обучения" пользователей, я должен следовать принцип наименьшего удивления и автоматически, установите флажок "Использовать это значение".

но как я могу слушать для разнообразия? Не могли бы вы, ребята, просто рассказать мне простой способ, вместо того, чтобы" обучать меня " о слушателях документов?


документы-это механизмы, которые java swing использует для хранения текста внутри JTextField. DocumentListeners-это объекты, которые реализуют интерфейс DocumentListener и, таким образом, позволяют вам перечислять изменения в документе, т. е. изменения в тексте JTextField.

чтобы использовать возможности document и documentlistener, как было предложено выше, расширьте свой класс (возможно, но не обязательно JFrame), чтобы он реализовал интерфейс DocumentListener. Реализовывать все методы интерфейса (скорее всего ваш Java IDE может сделать это полуавтоматически для вас. FYI, интерфейс DocumentListener имеет три метода: один для вставки символов (в текстовое поле), один для удаления символов и один для изменения атрибутов. Вы захотите реализовать первые два, как они называются, когда символы добавляются (первый) или удаляются (второй). Чтобы получить измененный текст, вы можете либо запросить текст в документе, либо проще назвать myTextField.то gettext().

c'est tout!

Фил Трой