我可以阻止 JDialog 在按下退出/输入键时关闭吗?

2024-01-13

我创建了一个对话框来接受用户击键来更改菜单项的键绑定。我希望 Enter 和 escape 成为用户可以绑定的键,但它们都会关闭对话框。如何拦截这些压力机?

编辑: 对话框是使用 JOptionPane 和自定义组件创建的

GetKeyComponent comp = new GetKeyComponent(accels, menuItem);
Object[] array = { comp };
JOptionPane optionPane = new JOptionPane(array, 
    JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);

编辑:对话框是使用 JOptionPane 和自定义组件创建的

解决方案之一:不要这样做。创建您自己的模态 JDialog,设置其 KeyBindings 并使用它。例如。,

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;    
import javax.swing.*;

public class JDialogTest {
   private static void createAndShowGUI() {
      final JFrame frame = new JFrame("JDialogTest");

      JPanel panel = new JPanel();
      panel.add(new JButton(new AbstractAction("Push Me") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            final JTextArea textArea = new JTextArea(15, 30);
            textArea.setFocusable(false);
            JDialog dialog = new JDialog(frame, "Dialog", true);

            int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
            JPanel contentPane = (JPanel) dialog.getContentPane();
            InputMap inputMap = contentPane.getInputMap(condition);
            ActionMap actionMap = contentPane.getActionMap();

            KeyStroke enterKs = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
            inputMap.put(enterKs, enterKs.toString());
            actionMap.put(enterKs.toString(), new AbstractAction() {

               @Override
               public void actionPerformed(ActionEvent arg0) {
                  textArea.append("Enter pushed\n");
               }
            });

            KeyStroke escKs = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
            inputMap.put(escKs, escKs.toString());
            actionMap.put(escKs.toString(), new AbstractAction() {

               @Override
               public void actionPerformed(ActionEvent arg0) {
                  textArea.append("Escape pushed\n");
               }
            });


            dialog.add(new JScrollPane(textArea));
            dialog.pack();
            dialog.setVisible(true);
         }
      }));

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(panel);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGUI();
         }
      });
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以阻止 JDialog 在按下退出/输入键时关闭吗? 的相关文章

  • 声纳违规:安全性 - 使用 byte[] 时直接存储数组

    我确实遇到过以下两篇关于类似问题的帖子声纳违规 https stackoverflow com questions 11580948 sonar violation security array is stored directly and
  • Hibernate 自定义架构创建

  • 匿名内部类显示不正确的修饰符

    据我了解 以下代码应该打印true作为输出 但是 当我运行这段代码时 它正在打印false 来自 Java 文档15 9 5 匿名类 https docs oracle com javase specs jls se8 html jls 1
  • 按对象值分组,统计后按最大对象属性设置组键

    我设法使用 Java 8 Streams API 编写了一个解决方案 该解决方案首先按对象 Route 的值对列表进行分组 然后计算每组中的对象数量 它返回一个映射 Route gt Long 这是代码 Map
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 为什么 MetaSpace 大小是已用 MetaSpace 的两倍?

    我写了一个程序来模拟MetaSpace OOM 但我发现MetaSpace Size几乎总是两倍大Used MetaSpace Why 我用标志运行我的程序 XX MaxMetaspaceSize 50m 程序抛出OOM时Used Meta
  • Java 泛型和数字类型

    我想创建一个通用方法来有效地执行此操作 class MyClass static
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 为什么 Java 中的 hashCode() 可以对不同对象返回相同的值?

    引用我正在读的书中的一段话首先Java http www amazon co uk Head First Java Kathy Sierra dp 0596009208 关键是 哈希码可以相同 但不一定保证对象相等 因为使用的 哈希算法 h
  • 如何使用 UUID 生成唯一的正 Long

    我需要为我的数据库主键列生成唯一的长 ID 我以为我可以用UUID randomUUID getMostSignificantBits 但有时它也会产生一些负多头 这对我来说是个问题 是否可以从 UUID 中仅生成正长 将会有数十亿个条目
  • kafka Avro 多个主题的消息反序列化器

    我正在尝试以 avro 格式反序列化 kafka 消息 我使用以下代码 https github com ivangfr springboot kafka debezium ksql blob master kafka research c
  • 将传入字符串的 unicode 表示形式转换为 UTF-8?

    我正在读取一些已经转换为 html 样式 代码的数据 我现在需要将其转换回 UTF 8 字符以供查看 不幸的是我无法使用浏览器查看该字符串 我读过有关 java 中的转换的内容 似乎如果你有一个 uxxxx 字符串 那么编译器会为你转换 然
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 如何减少 JSF 中的 javax.faces.ViewState

    减少 JSF 中视图状态隐藏字段大小的最佳方法是什么 我注意到我的视图状态约为 40k 这会在每次请求和响应时下降到客户端并返回到服务器 特别是到达服务器时 这对用户来说会显着减慢 我的环境 JSF 1 2 MyFaces Tomcat T
  • 如何在Webview中保存用户名和密码

    目前 我还在学习Android开发的过程中 所以如果我的这个问题对你来说不太容易理解 请原谅 我创建了一个 Android 应用程序 它使用 RecyclerView 显示一组列表 当用户单击列表中的每个名称时 它会将它们重定向到一组不同的
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • 为什么 HttpServletRequest 输入流为空?

    我有这段代码 我从请求输入流读取输入并使用 JacksonMapper 转换为 POJO 它在具有 guice 支持的 jetty 7 容器中运行 Override protected void doPost HttpServletRequ
  • Maven `help: effective-pom` 只为单个项目生成,而不是所有项目

    我想为多模块构建中的所有子项目生成有效的 pom The help effective pom文档here http maven apache org plugins maven help plugin usage html The hel
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我

随机推荐

  • body 标记末尾的渲染阻塞 Javascript - 内联脚本与外部脚本

    这是基于观察的后续行动上一个问题 https stackoverflow com questions 59468048 render blocking javascript at end of body tag firefox render
  • 使用多态函数从选项中提取对象

    无形状文档解释了如何使用多态函数来创建将一种容器中的对象映射到另一种容器中的函数 但是当您想从容器中解压东西时该怎么办 我有一个选项列表 val options Some 1 Some A Some 3 5 HNil 我想要一个多态函数 可
  • Twitter Bootstrap 图标或 ASCII 代码中的货币代码

    我正在 twitter bootstrap 中构建一个电子商务网站 我想在其中使用货币符号 图标在里面 我必须有其他选择 将货币代码写在ASCII码第二个是通过 twitter bootstrap 图标 我在其中创建自己的 css 到特定图
  • Tomcat 支持 HTTP/2.0?

    有谁知道Tomcat支持HTTP 2 0的最低版本是多少 我一直在他们的网站上到处寻找 但找不到有关此的任何详细信息 我是 Jetty 中的 HTTP 2 实现者 并且我关注其他实现 HTTP 2 的项目 雄猫队的马克 托马斯 Mark T
  • 如何在 Nginx 中启用 h2c?

    有没有办法在 Nginx 1 9 5 及以上版本中启用 h2c 又名 HTTP2 明文 我尝试过在 TL 上使用 h2https chronic101 xyz https chronic101 xyz它可以工作 但是我也想在端口 80 上实
  • 在 Linux 中将一个串行端口通过管道连接到另一个端口[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将一个串行端口数据 无论数据类型 传输到另一个串行端口的方法 就我而言 我试图从一个串行端口接收数据 并通过连接到另一个串行
  • 循环创建前 12 个月的列表

    有没有办法使用 PHP 循环根据当前月份 不包括当前月份 创建如下所示的前 12 个月的列表 该值应始终是每月的第一天 格式 yyyy mm dd 下拉列表本身应仅显示年份和月份 格式 yyyy mm
  • Extjs 5. Ext.application 不是一个函数。为什么?

    我在控制台中收到错误 Ext application is not a function My index html文件包含以下代码 While app js只有这段代码 取自一个演示 Ext applic
  • 如何强制从 iDevice 中删除应用程序

    我使用 TestFlight 分发应用程序进行 Beta 测试 客户拥有运行 iOS5 1 的 iPhone 4 并且无法从主屏幕删除应用程序 该应用程序是通过 TestFlight OTA 安装的 该应用程序图标上有一个空的进度条 点击时
  • Java 8 函数式接口的 lambda 模糊方法 - 目标类型

    我有以下代码 public class LambdaTest1 public static void method1 Predicate
  • 调色板库在 GridView 中滚动时更改颜色

    我在实现新的 Palette 库时遇到了一些问题 在 4 4 4 上 com android support palette v7 21 0 我正在尝试为 GridView 中每个项目的一部分着色 效果很好 但是当我将一个项目从屏幕上滚动然
  • NameError:名称“fcntl”未定义

    我已经安装了PuDB on python 3 4 2这是在virtualenv并运行在windows 7 sp1 我首先激活virtualenv workon env01 然后进入python控制台 python 现在我需要测试 PuDB
  • Excel 到 ADO RecordSet 的数字单元格具有空值

    我正在尝试从 Excel 文件导入一些数据来使用 但遇到了数字单元格值的问题 我有一些列的值 其中一些值都是数字 而其他值可能是数字和非数字值的混合 没有特殊字符 只有 A Z 字母 要将数据提取到记录集中 我正在执行以下操作 Set oc
  • PHP 中的负零等于 0 吗?

    我有一个非常基本的 MySQL 查询 它从数据库表中读取行 并将行值添加或减去定义为 total balance 的 PHP 字符串 例如 statement details query mysqli query con SELECT tr
  • 如何定义一个函数来检查句子结束后字符串是否有空格?

    这是我到目前为止尝试过的 def whitespace string for s in string if s 1 return s ended with whitespace s else return s was whitespace
  • round() 和 trunc() 函数有什么区别?

    我对这些功能很困惑 在数学中 rounding http en wikipedia org wiki Rounding表示四舍五入到最接近的整数 因此四舍五入 3 4 的结果是 3 四舍五入 3 6 的结果是 4 Truncating ht
  • Crystal Reports 使用 13.0.2000 的哪个版本?

    我的任务是对几年前编写的 ASP NET Web Forms 应用程序进行一些小的更改 该应用程序的实现者已经不在我们身边 几年前就离开了 该应用程序中有 6 个报告 所有报告都使用某些版本的 Crystal Reports 当我看着Web
  • 如何使用 Eloquent 查询两个坐标之间的距离

    我知道这个问题已经被问过很多次了 但我没想到要根据我的需要来制作 我需要查询距离另一个用户最近的用户 基本上 我有一个users表 这个表有一个one to one与的关系users locations具有纬度和经度字段的表 所以我看过这个
  • 是否可以一步在堆上创建 lambda? [复制]

    这个问题在这里已经有答案了 我们可以像这样创建一个 lambda auto x 我可以在堆上创建一个副本 如下所示 auto y new decltype x x 问题是 是否可以一步完成此操作 在堆上创建 lambda 而不需要额外的步骤
  • 我可以阻止 JDialog 在按下退出/输入键时关闭吗?

    我创建了一个对话框来接受用户击键来更改菜单项的键绑定 我希望 Enter 和 escape 成为用户可以绑定的键 但它们都会关闭对话框 如何拦截这些压力机 编辑 对话框是使用 JOptionPane 和自定义组件创建的 GetKeyComp