原文: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[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.CONTROL_DOWN Ctrl键
  • KeyCombination.SHIFT_DOWN Shift键
  • KeyCombination.META_DOWN Meta键
  • KeyCombination.ALT_DOWN Alt键
  • KeyCombination.SHORTCUT_DOWN 测试发现也是Ctrl键,不太明白这个..

参考

JavaFx 页面和控件设置快捷键的更多相关文章

  1. 【转】给Winform的button等控件添加快捷键

    ref: http://blog.sina.com.cn/s/blog_4cb9953f0100cy4z.html 第一种:Alt + *(按钮快捷键) 在大家给button.label.menuSt ...

  2. C# WinForm给Button按钮或其它控件添加快捷键响应

    就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加&键名就可以了,比如button1 ...

  3. Xamarin自定义布局系列——PivotPage,多页面切换控件

    PivotPage ---- 多页面切换控件 PivotPage是一个多页面切换控件,类似安卓中的ViewPager和UWP中的Pivot枢轴控件. 起初打算直接通过ScrollView+StackL ...

  4. C# WinForm给Button或其它控件添加快捷键响应

    今天做东西遇到要给按钮添加快捷键.就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...

  5. Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题

    场景 在Winform中进行页面设计时,常使用控件的Dock属性来进行布局调整.但是由于设置属性的顺序问题,导致达不到想要的效果. 比如以下两个控件 下面的控件设置的Dock属性是Bottom,即在页 ...

  6. C#如何给WinForm的button等控件添加快捷键

    网上有三种方法来设置快捷键,经本人验证后得出最优方法   Alt+*(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在后边加&键 名就可以了,比如b ...

  7. Android Material适配 为控件设置指定背景色和点击波纹效果

    Android Material适配 为控件设置指定背景色和点击波纹效果,有需要的朋友可以参考下. 大部分时候,我们都需要为控件设置指定背景色和点击效果 4.x以下可以使用selector,5.0以上 ...

  8. iOS之用xib给控件设置圆角、边框效果

    xib中为各种控件设置圆角 通过代码的方式设置 @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *my ...

  9. 完美解决C#Webbrowser控件设置Cookie问题

    完美解决C#Webbrowser控件设置Cookie问题由于个人项目需求,需要把从抓包里面的Cookie数据写入到webbrowser空控件里,经过百度白百般折腾,结果还是失败,搜索到的答案基本上都是 ...

  10. winform中的dateTimePicker控件设置默认值为空

    winform中的dateTimePicker控件设置默认值为空   第一步:设置Format的属性值为“Custom” 第二步:设置CustomFormat的属性值为空,需要按一个空格键

随机推荐

  1. Sentinel安装教程【Linux+windows】

    一.Sentinel的简介 Sentinel是阿里巴巴出品的一款流控组件,它以流量为切入点,在流量控制.断路.负载保护等多个领域开展工作,保障服务可靠性. 如果你学过netflix公司旗下的Hystr ...

  2. LeetCode------找到所有数组中消失的数字(6)【数组】

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array 1.题目 找到 ...

  3. sql语法巧用之not取反

    数据库的重要性和通用性都不用说了,什么sql的通用性,sql优化之类的也不必说了,咱们今天来聊聊另一个有意思的话题:如何取一个筛选的反面案例. 1. 举几个正反案例的例子 为了让大家理解我们的假设场景 ...

  4. 《上传那些事儿之Nest与Koa》——文件格式怎么了!

    转载自:juejin - 马睿不想说话 概要 本文主要针对在使用node作为服务端接口时,前端上传上传文件至node作为中转,再次上传至oss/cdn的场景.以及针对在这个过程中,需要对同一个文件进行 ...

  5. Spring知识框架

  6. 你所不知道的 vscode,汇集历史版本中你可能不知道的新特性

    壹 ❀ 引 vscode可以毫不夸张的说是大部分前端同学吃饭的工具(webstorm除外),随着时间的推移vscode其实也在不断推出了各种新功能新特性,但vscode并不会默认就实装这些新功能,我相 ...

  7. 【JVM】关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列

    写在前面 最近,一直有小伙伴让我整理下关于JVM的知识,经过十几天的收集与整理,初版算是整理出来了.希望对大家有所帮助. JDK 是什么? JDK 是用于支持 Java 程序开发的最小环境. Java ...

  8. Linux系统安装python

    1. 安装python3 1.1 下载python3安装包及其依赖包(该步骤可忽略,步骤1.2 提供应用包链接) ① 在python官网下载所需的python3,或者用外网centos机器的wget命 ...

  9. mybatis不知道取什么名字的标题

    <!--根据多个id --> <foreach collection="ids" index="index" item="item& ...

  10. gdb不能使用mac

    先说问题:1.gdb不能使用,重新用homebrew install 了gdb 2.brew装的gdb可以用了,但是等start调试的时候报这些错误:        dyld: Library not ...