【问题标题】:JDialog: How to disable the ESC key of my Modal dialog?JDialog:如何禁用我的模态对话框的 ESC 键?
【发布时间】:2010-10-23 13:27:42
【问题描述】:

所以有一个框架(主应用程序)。从这里,我打开一个模态 JDialog 并启动一个后台线程,同时在表格中显示进度(日志条目)。这个过程很关键,应该是可停止/可隐藏/可关闭的,因此对话框的关闭按钮在所有操作完成之前都处于停用状态。但是,用户可以在任何时间点击 ESC 键并调用我的 onCanceled(),从而调用 this.dispose()。

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

【问题讨论】:

    标签: java modal-dialog escaping jdialog


    【解决方案1】:

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

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

    但是,如果您的 LAF 有这种默认行为,那么拦截 Escape 键的正确方法是使用 Key Bindings。本教程展示了如何覆盖/删除绑定。

    【讨论】:

      【解决方案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.
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 2010-10-13
        • 2018-02-22
        • 2010-09-24
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多