当前位置: 首页 > 知识库问答 >
问题:

为什么我不能删除这个JTextField默认键绑定?

呼延俊风
2023-03-14

我有一个扩展JTextField的类,我想让CTRL-Shift-O做一些事情。我一直在听

JTextFieldExtension.addKeyListener(new KeyAdapter() {

public void keyReleased(KeyEvent e)
{
}

}

在e.isControlDown()和e.isShiftDown()的帮助下,这种方法运行良好。但我注意到字段中的文本也在从左边向右边移动。显然,这是JTextField的默认行为。所以我在So上找到了这个线程,它似乎很有帮助:

如何禁用JTextField中的默认textfield快捷方式

     this.getInputMap().put(KeyStroke.getKeyStroke("shift ctrl pressed O"), null);
     KeyStroke[] strokes = this.getInputMap().allKeys();
     for (KeyStroke ks : strokes)
     {
        System.out.println(ks.toString());
     } 

尽管System.out.println显示“Shift ctrl pressed O”作为它列出的所有键之一,但它还是不起作用。我还尝试调用inputmap.remove而不是Put(),但没有成功。

我错过了什么?

共有1个答案

陈瀚玥
2023-03-14

在本例中,从输入映射中删除键似乎不像我所期望的那样有效,但您可以重写已安装的操作来有效地禁用“开关组件方向”。在Swing中,输入映射将击键映射到对象(通常是字符串),这些对象作为操作映射的标识符,而操作映射又保存相应的操作。因此,禁用Ctrl+Shift+O的简单方法如下:

myComponent.getInputMap().put(KeyStroke.getKeyStroke("shift ctrl pressed O"), "Nothing");

这只是将击键重新映射到操作映射中不包含的内容(字符串“nothing”,也可以是“foo”),因此当您按Ctrl+Shift+O时不会发生任何事情。

编辑:我可以看到这是在你链接的线程中提出的。不过,我确实确认了上述代码将适用于文本字段。如果不适合您,请在代码中提供一个简短的调用示例。

 类似资料:
  • 我从课本上抄了一个例子,但它拒绝编译。我是不是在什么地方打错了?出于某种原因,在客户端代码中,collections.sort(words)不允许程序编译。任何帮助都很感激。代码复制自Stuart Reges和Marty Stepp的“构建Java程序”第二版。我正试图通过复制来理解它。 该程序应该将一个CalendarDate对象装入一个ArrayList中。通过实现CalendarDate的可

  • 问题内容: 我拼命地试图从字符串中删除空格(后来我希望能够将其转换为一个int),但是我似乎无法正常运行。 你能告诉我,我做错了什么吗?PS:我也尝试过\ W“和\ S” 问题答案: 更换 与 它将起作用,因为字符串是不可变的,因此不会更改您的字符串对象,它将返回一个新的字符串对象。因此,您将变量分配给由返回的字符串 另外,您应该尝试遵循Java命名约定,并使字段和变量以小写字母开头。 而且,您也

  • 问题内容: 为什么这段代码会引发SyntaxError? 尽管以下代码段运行时没有可见错误: 问题答案: 必须将所有必需的参数放在任何默认参数之前。仅仅是因为它们是强制性的,而默认参数不是必需的。从语法上讲,如果允许使用混合模式,解释器将 无法 决定哪些值与哪些参数匹配。如果参数的输入顺序不正确,则会引发A : 让我们使用您的函数来查看关键字参数。 假设其允许声明函数如上,然后使用上述声明,我们可

  • 问题内容: 限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将其设置为等于最大堆大小?Java为什么默认为这么少的64MB?他们是否正在试图通过这种方式迫使人们注意代码中的Permgen问题? 如果我的应用使用85MB的permgen,那么将其设置为96MB可能是安全的,但是如果它只是主堆的一部分,为什么还要设置得如此之小呢?允许JVM使用堆允许的PermGen效率不高吗?

  • 当用户键入以下内容的答案时:system.out.println(“键入数字”); 它不会继续到我的代码的下一部分。

  • 我正在运行这样一个简单的SQL连接和select,但在运行查询时,我遇到了非常奇怪的错误。 警告:mysqli_fetch_array()希望参数1是mysqli_结果,布尔值在第23行的C:\xampp\htdocs\Webmaster\run\forum_mc.php中给出 警告:mysqli_query():第24行()上C:\xampp\htdocs\Webmaster\run\forum