JavaFx 页面和控件设置快捷键 - Stars-One的杂货小窝
这里主要是Tornadofx为例进行讲解,以Kotlin语言为例,由于比较简单,就不贴截图了,下面例子都是自己测试成功的
使用
KeyCodeCombination对象不同而已
scene对象的方法和KeyCodeCombination
快捷键参数来进行设置的
1.addMnemonic方法
addMnemonic(方法,可以为按钮设置快捷键,当触发快捷键后,会执行按钮的action操作
class ShoetCutDemoView : View("My View" {
var btn by singleAssign<Button>(
override val root = vbox {
setPrefSize(700.0, 400.0
btn = button("测试1" {
action{
println("按下了按钮"
}
}
}
override fun onBeforeShow( {
test1(
}
fun test1( {
//快捷键ctrl+alt+c
val kc1 = KeyCodeCombination(KeyCode.C, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN
val mnemonic1 = Mnemonic(btn, kc1
currentWindow?.scene?.addMnemonic(mnemonic1
}
}
注意:这里由于Tornadofx里的View对象是存在这对应的生命周期,所以设置快捷键不能再root里面布局里写,因为此时还没有形成对应的scene对象
要在
onBeforeShow(
方法里或者是在事件里设置快捷键(如按钮的点击事件,鼠标点击事件等)
2.accelerators方法
通过accelerators
方法,为当前的窗口页面设置快捷键,只有焦点处于当前窗口页面,按下快捷键才能触发
fun test2( {
//快捷键ctrl+v
val kc1 = KeyCodeCombination(KeyCode.V, KeyCombination.CONTROL_DOWN
currentWindow?.scene?.apply {
accelerators[kc1] = Runnable {
println("快捷键CTRL + V"
}
}
}
3.addEventFilter方法
通过addEventFilter(
方法,为当前的窗口页面设置快捷键,只有焦点处于当前窗口页面,按下快捷键才能触发
fun test3( {
val kc1 = KeyCodeCombination(KeyCode.V, KeyCombination.CONTROL_DOWN
currentWindow?.addEventFilter(KeyEvent.KEY_PRESSED { event ->
if (kc1.match(event {
println("按下了快捷键。"
}
}
}
补充-生成KeyCodeCombination的几种方法
下面的快捷键都是ctrl+v的示例代码:
val kc1 = KeyCodeCombination(KeyCode.V, KeyCombination.CONTROL_DOWN
//这个类不怎么用,用法和KeyCodeCombination类似,但看文档也没太明白这两者有什么区别..
val kc1 = KeyCharacterCombination("V", KeyCombination.CONTROL_DOWN
//下面这两个用法一样
val kc1 = KeyCombination.keyCombination("ctrl+v"
val kc1 = KeyCombination.valueOf("ctrl+v"
//如果是mac,可以用meta这个
val kc1 = KeyCombination.valueOf("Meta+v"
这里看了文档也没搞懂为什么要用KeyCombination.CONTROL_DOWN
这个用法,就先固定着用吧
-
KeyCombination.SHIFT_DOWN
Shift键 -
KeyCombination.META_DOWN
Meta键 -
KeyCombination.ALT_DOWN
Alt键 -
KeyCombination.SHORTCUT_DOWN
测试发现也是Ctrl键,不太明白这个..
KeyCombination.CONTROL_DOWN
Ctrl键