Обнаружение, когда пользователь нажимает войти в Java - PullRequest
6 голосов
/ 12 января 2011

У меня есть подкласс JComboBox. Я пытаюсь добавить ключевой слушатель со следующим кодом.


        addKeyListener(new KeyAdapter() 
        {
            public void keyPressed(KeyEvent evt)
            {
                if(evt.getKeyCode() == KeyEvent.VK_ENTER)
                {
                    System.out.println("Pressed");
                }
            }
        });

Однако, это не правильно определяет, когда пользователь нажимает клавишу. На самом деле это не называется вообще. Я добавляю этого слушателя неправильно? Есть ли другие способы добавить его?

Ответы [ 2 ]

14 голосов
/ 12 января 2011

Ключевые события запускаются не на самой коробке, а на ее редакторе.Вам необходимо добавить keyListener в редактор JComboBox, а не прямо в поле:

comboBox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() 
    {
        public void keyPressed(KeyEvent evt)
        {
            if(evt.getKeyCode() == KeyEvent.VK_ENTER)
            {
                System.out.println("Pressed");
            }
        }
    });

Редактировать: исправлен вызов метода.

1 голос
/ 13 января 2011

Это НЕ правильный подход.Редактор для JComboBox - это JTextField.Если вы хотите обработать клавишу Enter, то вы добавляете ActionListener в текстовое поле.

Всегда избегайте использования KeyListener.

Редактировать:

comboBox.getEditorComponent().addActionListener( ... );
...