我终于完全切换到了JavaFX。
我非常热衷于按键功能。
在Swing中找到的(非常好的)架构是否有相同的热键架构?它在JavaFX文本控件对象的情况下如何工作?如果我看一下javafx.scene.control.TextInputControl
,我认为一切都会变得清晰。当然也尝试用谷歌搜索。
但我没有更聪明的人。据推测,在编辑文本时,必须有一个最小击键绑定源?它是否同样分层?
使用Swing,JComponent
每个ActionMap
可以使用1 InputMaps
和3 InputMap
(并且所有这些都可以拥有"祖先"地图)。 3 JComponent
"类型"由WHEN_FOCUSED
常量WHEN_IN_FOCUSED_WINDOW
,WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
和javafx.scene.Node
决定,它们是非常不言自明的名称。我真的很想知道有多少Swing用户熟悉所有这些东西,但就个人而言,作为键盘狂热者,我广泛使用这个功能。
能够使用setOnKeyPressed
将键绑定附加到给定的WHEN_FOCUSED
大概相当于使用JComponent
Swing功能......但是其他两个类别呢,我想知道?它们是否在当前的JavaFX实现中缺席?
归根结底,在Swing的幕后,显然有一种非常复杂的机制,包括按键被传递出来。 InputMap
个对象的层次结构,直到它们被捕获为#34;通过Oracle Storage Cloud Service container name must be in the format https|http://<storagedomain>/{version}/<schema name>/<container name> or <storage service name>-<identity domain name>/<container name>. For example, storagesvc999-usoracleaccoutrial00999/backupContainer
Name of an existing Oracle Storage Cloud Service container in the form https|http://<storagedomain>/{version}/<schema name>/<container name> or <storage service name>-<identity domain name>/<container name>. e.g:storagesvc999-usoracleaccoutrial00999/backupContainer; If not already created, you can create the container by selecting the checkbox provided below.
(或不是)...可能在JavaFX中必定有类似的东西。有章节和诗歌会很高兴......
答案 0 :(得分:1)
在JavaFX中,您可以注册KeyPressed
个事件的回调。
例如:
myTextField.setOnKeyPressed(event->{
if (event.getCode() == KeyCode.ENTER){
//do something here
}
}
如果您想注册全局组合键(例如,用于保存的典型Ctrl-S),您可以使用:
myScene.getAccellerators().put(
new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN),
() -> { /** save my work **/ }
)
可用的KeyCodeCombinations列表:https://docs.oracle.com/javafx/2/api/javafx/scene/input/KeyCodeCombination.html
编辑(1):事件传播的工作原理
来自http://docs.oracle.com/javafx/2/events/processing.htm
事件传递过程包含以下步骤:
答案 1 :(得分:0)
阿哈。
This question,从一年前开始,已经与Java 9有关,揭示了com.sun.javafx.scene.control.inputmap.InputMap
的JavaFX中未来的存在......显然此刻
包com.sun.javafx.scene.control.inputmap
不存在(在Java 8中)(除非我非常错误)。
提出这个问题的人,Kleopatra,是Java Swing的专家,现在可能是JavaFX。我们看到Java 9的一些早期版本现在正在发生,即2017年3月,正是......但是我已经尝试使用Google Javadoc for JavaFX 9进行Google搜索,我还没有看到com.sun.javafx.scene.control.inputmap.InputMap
的任何迹象。