- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找不到关于所有这些之间关系的简明答案,所以我可以选择最佳实践并继续前进。 JTextComponent
有:
旧的 addKeyListener(..)
。我们编写一个 KeyListener
,其中包含在 keyPressed(..)
、keyTyped(..)
等事件上调用的方法,我们可以查询:event.getKeyCode()
。
addKeymap(..)
和 setKeymap(..)
。 Keymap
有 addActionForKeyStroke(..)
,它需要一个 KeyStroke
(我们可以通过调用 KeyStroke
' s 指定字符或键代码的静态方法)和一个 Action
,它是一个带有铃声和口哨声的 ActionListener
。
getInputMap(..)
和 getActionMap(..)
。 InputMap
将 KeyStroke
(如上)映射到 String
,ActionMap
将字符串映射到 Action
(如上)。 Java 教程 How to use key bindings谈论那个。
这是实现相同功能的三种冗余方式。除了比较优势/劣势之外,这还自然地提出了这三种机制如何共存的问题?哪些优先于其他?
最佳答案
InputMap
+ ActionMap
系统在 1.3 中引入并替换了旧的 Keymap
(使用 InputMap 重新实现)
+ ActionMap
引擎盖下的系统,用于向后兼容)。新系统具有 Keymap
功能的超集。 (来自 Loy 和 Eckstein 的 O'Reilly 书 Java Swing,在 page 755 上。)
因此,我们无需担心新代码的Keymap
。
How to use key bindings 中的 Java 教程甚至没有提到 Keymap
,但它确实解决了 KeyListener
与键 bindings(即 InputMap
+ ActionMap
设施):
KeyListener
的方法需要更多的工作,因为焦点和组件包含层次结构(它不知道)的问题。比如我们有一个table组件,里面包含一个table-cell组件,它有焦点,按↑键会向table cell组件发送事件,由我们来决定将它们转发到表格(因为我们想要更改表格当前选定的单元格)。
相比之下,键绑定(bind)让我们可以直接在父组件上指定绑定(bind):每个 JComponent
都有三个 InputMap
和一个 ActionMap
。输入映射属于以下类型:JComponent.WHEN_FOCUSED
、WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
和 WHEN_IN_FOCUSED_WINDOW
。与监听器不同,在监听器中,焦点组件上的所有 KeyListener
仅 按顺序处理,使用键绑定(bind)事件将向上传播层次结构(好吧,我的树想想,因为每个组件只有一个父级)直到它找到一个 Action (还没有被禁用),这就是它停止的时候。在此搜索过程中,第二种类型的 InputMap
优先于第三种类型。
KeyListener
优先于键绑定(bind)机制。当一个组件的 KeyListener
正在处理时,其中一个可能 e.consume()
,然后事件将不会进一步到达 KeyListener
s,也不是键绑定(bind)层次结构。最后添加的关键监听器首先被处理。
因此,虽然键绑定(bind)方法从头开始设置起来有点麻烦(您必须为 Action
命名,并调用两个方法将其绑定(bind)到KeyStroke
通过 InputMap
和 AbstractAction
通过 ActionMap
),似乎它应该是分配要响应按键而调用的函数的第一个调用点。 KeyListener
使您能够做更多事情(例如奇特的组合键——超出 KeyStroke
所能处理的范围;并允许更早地访问按键事件,并能够 e .consume()
它),但键绑定(bind)更方便,因为它们可以预测基本用例。
相关点(由 related question 建议)是另一种处理文本组件的冗余机制,尤其是:DocumentListener
s和 DocumentFilter
s .当重新映射键的原因是控制文本组件中的文本发生什么时,这些更加方便和防错。
另请参阅:关于键绑定(bind)系统从引入之日起如何工作的详细信息的报告,archived version .
关于java - Keymap、InputMap、ActionMap、KeyListener — 选择重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647483/
我正在尝试向我的一个键映射绑定添加计数。然而,以下情况并未如预期那样工作:。如果我使用组合键50,则只会添加一行,并且编辑器处于插入模式。只有在我自己按了键之后,才会出现额外的4行,并且编辑器会切换到
在我的sublime-keymap文件中,我已经有了: { "keys": ["shift+space"], "command": "move", "args": {"by": "characters
我正在尝试将 key 绑定(bind)到某些组件。我的问题是,只有最后一个组件才会绑定(bind)一个 key 。例如: switch(element.id) { case "menu
我想为我的终端提供类似vim的导航,所以我补充道: set editing-mode vi set keymap vi 我的.inputrc文件基于this。editing-mode vi添加vi导航
使用 ExtJS 4.1.1,即使在 Ext.util.KeyMap 中我设置了 defaultEventAction: 'preventDefault' 并且在 fn : 函数中我也设置了 e.pr
我目前正在为Linux(在Raspberry Pi硬件下)开发GUI,并且我对键盘有一个(很基本的)问题。 我可以通过使用input/eventX文件来处理keypressed,keyreleased
在 Java 中,通过使用非默认系统外观,我们将拥有不同的键盘映射。 例如我正在使用 Mac OS X 并使用 Substance 外观(非默认系统外观)。结果是我丢失了用于全选文本组件的“元”键在
我开始自定义 Atom 编辑器,并且在尝试更改 Tree View:Toggle 的键映射时遇到了困难。 我把它放在我的用户 keycap.cson 文件中: '.editor': 'ctrl-t':
是否有可用于键映射的命令,用于在 Atom 编辑器中切换不可见项的显示。显示/隐藏不可见命令? 我会去哪里寻找这样的命令? 最佳答案 是 对于 Linux 和 Windows: 1) 按 Ctrl+S
我是一位 IntelliJ 老用户,现在正在开发一个需要 Eclipse 的项目。我不介意学习 Eclipse 默认键盘快捷键(如果有),但是很多操作都没有分配快捷键(grrrr!) 我想知道是否有任
创建/绑定(bind) KeyMaps 到视口(viewport)的最佳位置是什么? 给定一个像这样的非常简单的视口(viewport): Ext.define('EmptyTemplate.view
function Keymap(bindings) { this.map = {}; // Define the key identifier->handler map if (
我找不到关于所有这些之间关系的简明答案,所以我可以选择最佳实践并继续前进。 JTextComponent有: 旧的 addKeyListener(..)。我们编写一个 KeyListener,其中包含
我正在设置我自己的键映射,想知道是否有设置键的选项来切换正在处理的文件类型。因此,例如,如果我有一个普通的纯文本文件并希望它成为一个 css 文件,我将有一个将文档类型更改为 css 的键映射。可能的
由于我经常在适用于 Windows 的 Android Studio 和适用于 Mac 的 Android Studio 之间切换,我开始创建一个统一的快捷方式配置来让我的生活更轻松:-) 我需要在两
为了完善我正在开发的应用程序,我为常见任务添加了键盘快捷键。我可以起诉 Ext.KeyMap 这样做... var map = new Ext.KeyMap("my-element", { k
IntelliJ IDEA Keymap 中的“缩写”功能有什么用? Web help on Keymap对此保持沉默。 最佳答案 根据 JetBrains 支持部门的 Andrey Dernov 的
我想设置一个键映射来在 Netbeans 7.2 中生成 java 文档的结构。我想知道是否有人知道该怎么做? 最佳答案 已经设置了一个键映射来执行此操作,称为“生成 Javadoc”。如果您转到工具
描述: “用户可安装的键盘映射”是在 http://developer.android.com/about/versions/jelly-bean.html 上为 Android 4.1 列出的一项功
当我尝试修改 PHPStorm 的键盘映射以像 Sublime Text 一样工作时。我发现很多冲突 PHPStorm 有没有像 Sublime Text 这样的键盘映射配置? 谢谢 最佳答案 我们还
我是一名优秀的程序员,十分优秀!