Detecting when user presses enter in Java

2019-02-22 06:18发布

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?

2条回答
Ridiculous、
2楼-- · 2019-02-22 06:57

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.

查看更多
乱世女痞
3楼-- · 2019-02-22 07:00

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( ... );
查看更多
登录 后发表回答