【发布时间】:2011-04-28 21:16:18
【问题描述】:
我有一个名为 NavigationLink 的自定义 Swing 组件,它扩展了 JLabel 并实现了一个关键事件侦听器,如下所示:
addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
boolean actionInvoked = e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SPACE;
if (actionInvoked && NavigationLink.this.clickAction != null) {
NavigationLink.this.clickAction.run();
}
}
});
clickAction 是一个 Runnable,它打开一个 JOptionPane.showMessageDialog,其中包含一个按钮,“OK”。一切正常,问题如下:
- 用户使用 TAB 导航到 NavigationLink,直到成为焦点
- 使用按 ENTER,打开对话框消息,默认情况下“确定”按钮处于焦点位置
- 用户按下 ENTER 会关闭对话框,但也会触发 NavigationLink 中的 keyReleased 事件,立即再次打开对话框!
如何在 ENTER 事件被处理后取消对话框的“确定”按钮?
【问题讨论】:
标签: java events swing awt keyboard-events