Java JDialog:如何禁用模式对话框的ESC键?

Java JDialog:如何禁用模式对话框的ESC键?,java,modal-dialog,escaping,jdialog,Java,Modal Dialog,Escaping,Jdialog,所以有一个框架(主应用程序)。从这里,我打开一个模态JDialog并启动一个后台线程,同时在表中显示进度(日志条目)。此过程非常关键,应该而不是可停止/隐藏/关闭,因此,为什么对话框的关闭按钮会被取消激活,直到一切完成。但是,用户可以随时轻触ESC键并调用my onCanceled(),从而调用this.dispose() 编辑: 我继承了这个项目,并监督了继承的兔子洞有多深,从而监督了ESC的处理,接着是e.consume(),这就是我的解决方案不起作用的原因 必须忽略ESC键中的笔划。您可以

所以有一个框架(主应用程序)。从这里,我打开一个模态JDialog并启动一个后台线程,同时在表中显示进度(日志条目)。此过程非常关键,应该而不是可停止/隐藏/关闭,因此,为什么对话框的关闭按钮会被取消激活,直到一切完成。但是,用户可以随时轻触ESC键并调用my onCanceled(),从而调用this.dispose()

编辑:
我继承了这个项目,并监督了继承的兔子洞有多深,从而监督了ESC的处理,接着是e.consume(),这就是我的解决方案不起作用的原因

必须忽略ESC键中的笔划。您可以通过如下方式侦听对话框中的关键事件来实现这一点(假设变量jDialog是您的对话框对象)

但是,用户可以随时轻触ESC键并调用my onCanceled()

这听起来像是添加到应用程序中的自定义代码,因为大多数LAF在默认情况下不实现Escape键。所以我会删除自定义代码

但是,如果您的LAF具有此默认行为,则拦截转义键的正确方法是使用。本教程介绍如何覆盖/删除绑定

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.
});