JDialog:如何禁用我的modal dialog的ESC键?

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

编辑:我inheritance了这个项目并监督了inheritance兔洞的深度,因此监督了ESC的处理,接着是e.consume(),这就是为什么我的解决方案无法正常工作!

但是,用户可以随时点击ESC键并调用onCanceled()

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

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

您必须忽略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. });