我有一个名为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”。所有这一切都很好,问题如下:
如何在处理后取消ENTER事件,但是对话框为“OK”按钮?
答案 0 :(得分:1)
不要使用KeyListeners。
您应该使用Key Bindings将Enter键绑定到Action。
答案 1 :(得分:0)
您可以通过调用getSource()来尝试在keyReleased方法中检查KeyEvent的源代码。如果源不是NavigationLink组件,则不要调用NavigationLink.this.clickAction.run()。