饭宝 发表于 2023-1-10 12:28:17

JavaFx 页面和控件设置快捷键

原文:JavaFx 页面和控件设置快捷键 - Stars-One的杂货小窝
之前说过一篇window系统全局快捷键的设置,本期主要是讲解JavaFx应用程序的快捷键设置,还是有所区别的
这里主要是Tornadofx为例进行讲解,以Kotlin语言为例,由于比较简单,就不贴截图了,下面例子都是自己测试成功的
使用

看网上的一篇文章,说是有5钟方法,实际上只有3种方法,他提及的5种方法实际上有两种只是构造生成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()方法里或者是在事件里设置快捷键(如按钮的点击事件,鼠标点击事件等)
为了方便阅读,下面贴出的代码例子均是在onBeforeShow()里调用方法,之后不再赘述
2.accelerators方法

通过accelerators方法,为当前的窗口页面设置快捷键,只有焦点处于当前窗口页面,按下快捷键才能触发
fun test2() {
    //快捷键ctrl+v
    val kc1 = KeyCodeCombination(KeyCode.V, KeyCombination.CONTROL_DOWN)
    currentWindow?.scene?.apply {
      accelerators = 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.CONTROL_DOWN Ctrl键
[*]KeyCombination.SHIFT_DOWN Shift键
[*]KeyCombination.META_DOWN Meta键
[*]KeyCombination.ALT_DOWN Alt键
[*]KeyCombination.SHORTCUT_DOWN 测试发现也是Ctrl键,不太明白这个..
参考


[*]【笔记】javafx设置快捷键_五种方法_ccOCONuTT的博客-CSDN博客
[*]JavaFX视频教程第11课,设置快捷键_哔哩哔哩_bilibili
[*]KeyCodeCombination (JavaFX 8官方文档)
[*]KeyCode (JavaFX 8)
[*]Overview List (JavaFX 8)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: JavaFx 页面和控件设置快捷键