Пусть ActionListener прослушивает изменения в JTextField, а не только ввод? - PullRequest
9 голосов
/ 05 декабря 2011

Итак, как вы, возможно, знаете, если у вас есть текстовое поле и вы добавляете в него ActionListener, оно будет прослушивать только нажатие кнопки ввода. Однако я хочу, чтобы мой 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 ]

21 голосов
/ 05 декабря 2011

Из ответа @ JRL


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

myTextField.getDocument().addDocumentListener();
2 голосов
/ 02 декабря 2013

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

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

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

0 голосов
/ 30 июня 2017

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

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

C'est Tout!

Фил Трой

...