检测用户何时按下Java键

时间:2011-01-12 19:50:20

标签: java events swing jcombobox keylistener

我有一个JComboBox的子类。我尝试使用以下代码添加一个密钥监听器。


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

然而,这无法正确检测用户何时按下按键。它实际上根本没有被调用。我添加这个监听器错了吗?还有其他方法可以添加吗?

2 个答案:

答案 0 :(得分:14)

关键事件不是在盒子本身上触发的,而是它的编辑器。您需要将keyListener添加到JComboBox的编辑器而不是直接添加到框中:

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

编辑:固定方法调用。

答案 1 :(得分:1)

这不是正确的做法。 JComboBox的编辑器是JTextField。如果要处理Enter键,则将ActionListener添加到文本字段。

始终避免使用KeyListeners。

编辑:

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