我有一个JComboBox的子类。我尝试使用以下代码添加一个密钥监听器。
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent evt)
{
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
{
System.out.println("Pressed");
}
}
});
然而,这无法正确检测用户何时按下按键。它实际上根本没有被调用。我添加这个监听器错了吗?还有其他方法可以添加吗?
答案 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( ... );