JDialog:如何禁用我的模态对话框的ESC键?

时间:2010-10-23 13:27:43

标签: java modal-dialog escaping jdialog

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

编辑: 我继承了这个项目并监督了遗产兔洞的深度,因此监督了ESC的处理,然后是e.consume(),这就是为什么我的解决方案无效!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

  

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

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

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