所以有一个框架(主应用程序)。从这里,我打开一个 Modal JDialog 并启动一个后台线程,同时在表格中显示进度(日志条目)。这个过程很关键,不应该是可停止/隐藏/关闭的,因此为什么对话框的关闭按钮在一切都完成之前会被停用。但是,用户可以随时点击 ESC 键并调用我的 onCanceled(),从而调用 this.dispose()。
编辑:我继承了这个项目并监督了继承的兔子洞有多深,因此已经监督了 ESC 的处理,然后是 e.consume() 这就是我的解决方案不起作用的原因!
所以有一个框架(主应用程序)。从这里,我打开一个 Modal JDialog 并启动一个后台线程,同时在表格中显示进度(日志条目)。这个过程很关键,不应该是可停止/隐藏/关闭的,因此为什么对话框的关闭按钮在一切都完成之前会被停用。但是,用户可以随时点击 ESC 键并调用我的 onCanceled(),从而调用 this.dispose()。
编辑:我继承了这个项目并监督了继承的兔子洞有多深,因此已经监督了 ESC 的处理,然后是 e.consume() 这就是我的解决方案不起作用的原因!
但是,用户可以随时点击 ESC 键并调用我的 onCanceled()
这听起来像是添加到 APP 的自定义代码,因为大多数 LAF 默认情况下不实现 Escape 键。所以我会删除自定义代码。
但是,如果您的 LAF 有这种默认行为,那么拦截 Escape 键的正确方法是使用Key Bindings。本教程展示了如何覆盖/删除绑定。
您必须忽略 ESC 键的笔划。您可以通过从对话框中侦听关键事件来做到这一点,如下所示(假设变量jDialog是您的对话框对象)。
jDialog.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
// Catch ESC key stroke.
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
// TODO ignore or warn user here.
// or call e.consume();
}
}
// Other overriden methods here.
});