Question

I have a subclass of JComboBox. I attempt to add a key listener with the following code.


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

This however does not correctly detect when the user presses a key. It is actually not called at all. Am I adding this listener wrong? Are there other ways to add it?

Was it helpful?

Solution

Key events aren't fired on the box itself, but its editor. You need to add the keyListener to the editor of the JComboBox and not the box directly:

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

Edit: fixed method call.

OTHER TIPS

This is NOT the proper approach. The editor for a JComboBox is a JTextField. If you want to handle the Enter key then you add an ActionListener to the text field.

Always avoid using KeyListeners.

Edit:

comboBox.getEditorComponent().addActionListener( ... );
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top