【发布时间】:2015-03-12 22:04:01
【问题描述】:
我正在观察以下行为:
向 JComboBox 添加新的 KeyListener 并调用 e.consume() 会阻止 Default KeyListener 触发其事件。
这是我的示例代码:
final JComboBox cb = new JComboBox(fooList);
final KeyListener fooKeyListener = new KeyAdapter(){
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("VK_DOWN fired");
e.consume();
}
}
};
cb.addKeyListener(fooKeyListener);
contentPanel.add(cb);
在此之后,当我按下向下箭头按钮时,我只会输出“VK_DOWN 触发”并且整个滚动/选择机制停止工作。
我希望,负责所有滚动内容的默认 KeyListener 会首先执行,因此 e.consume() 不应该阻止它工作。顺便说一句,调用e.consume() 是唯一停止滚动机制的方法!即使调用cb.removeKeyListener(cb.getKeyListeners()[0]); 也不会阻止滚动机制的工作(在我看来,这似乎很奇怪!)。
任何帮助表示赞赏!
【问题讨论】:
标签: java swing jcombobox keylistener