Метод KeyTyped говорит, что TextField пусто ... когда это не - PullRequest
2 голосов
/ 02 марта 2012
        Jtxtfield.addKeyListener(new KeyListener() {
        public void keyPressed(KeyEvent e) {};
        public void keyTyped(KeyEvent e) {
            if(Jtxtfield.getText().equals(""))
            System.out.println("hello1");
        }public void keyReleased(KeyEvent e) {
            if(Jtxtfield.getText().equals(""))
            System.out.println("hello2");
        }
    });

Вывод для первой нажатой клавиши (скажем, 'a'): hello1. Если я нажму вторую клавишу (скажем, снова «а»), не будет никакого выхода (как и ожидалось). Если я дважды нажму клавишу удаления, я получу hello1 hello2.

Почему это происходит? Почему метод keyTyped рассматривает txtfield так, как будто в нем ничего нет? Более конкретно, почему я получаю только hello1, когда я нажимаю клавишу, которая является первой клавишей, нажатой в текстовом поле?

1 Ответ

7 голосов
/ 02 марта 2012

В текстовом поле последовательно запускаются три события: событие нажатия клавиши, событие ввода с клавиатуры и событие отпускания клавиши.Событие с типом ключа не имеет информации о коде ключа;у них также нет информации модификатора.Если вас волнует только то, какие символы вводит пользователь, вам следует обрабатывать события, вводимые с клавиатуры.Если вас волнует, какие клавиши нажимает / отпускает пользователь, вам следует обрабатывать события нажатия / отпускания клавиши.

Если вы хотите, чтобы значение текстового поля использовало keyReleased (KeyEvent e) как

JTextField txt = (JTextField) e.getSource();
System.out.println(txt.getText());

Пример, который вы можете найти здесь

Также вы можете использовать DocumentListener .

...