在Java中检测用户按下回车键

6

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


        addKeyListener(new KeyAdapter() 
        {
            public void keyPressed(KeyEvent evt)
            {
                if(evt.getKeyCode() == KeyEvent.VK_ENTER)
                {
                    System.out.println("按下了Enter键");
                }
            }
        });

然而,这种方法无法正确地检测到用户按键,实际上根本不会被调用。我是否添加监听器的方式有误?还有其他添加监听器的方法吗?


请展示完整的代码,我想知道为什么需要跟踪组合框中的回车键按下。 - jmj
这个函数似乎没有问题,可能是你调用它的方式有问题。我们需要看更多的代码。 - Carlos Valenzuela
@user489041,你不应该使用KeyListener来实现这个功能。 - camickr
2个回答

16

键盘事件不会在下拉框本身上触发,而是在其编辑器上触发。您需要将keyListener添加到JComboBox的编辑器上,而不是直接添加到下拉框本身:

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

编辑:修正了方法调用。


1

这不是正确的方法。JComboBox 的编辑器是 JTextField。如果您想处理 Enter 键,则应向文本字段添加 ActionListener。

始终避免使用 KeyListeners。

编辑:

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

@user489041,你有没有给JButton添加过ActionListener?其实代码是完全一样的。如果你没有添加过,那么可以阅读Swing教程中关于“如何编写Action Listener”的部分(http://download.oracle.com/javase/tutorial/uiswing/TOC.html)。 - camickr
你需要使用comboBox.getEditor().addActionListener(...)。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接