原文: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. Dest0g3迎新赛misc部分解析

    ​ 目录 1. Pngenius 2. EasyEncode 3. 你知道js吗 4. StrangeTraffic 5. EasyWord 6.4096 7.python_jail 8. codeg ...

  2. 齐博x1fun实例 鉴于很多人问列表的筛选怎么放到首页、内容页等等地方 贴出方法

    application\common\fun\Field.php 你可以复制一份 也可以直接改 直接改记得加锁 不然升级就覆盖了 我们把   public function list_filter($ ...

  3. vue3学习记录(新特性)

    总概 1) 性能提升 打包大小减少 41% 初次渲染快 55%,更新渲染快 133% 内存减少 54% 使用 Proxy 代替 defineProperty 实现数据响应式 重写虚拟 DOM 的实现和 ...

  4. 深度优先搜索(Depth-First-Search)dfs代码模板

    void dfs()//参数用来表示状态 { if(到达终点状态) { ...//根据需求添加 return; } if(越界或者是不合法状态) return; if(特殊状态)//剪枝,去除一些不需 ...

  5. Workflow,要不要了解一下

    摘要:Workflow本质是开发者基于实际业务场景开发用于部署模型或应用的流水线工具. Workflow(也称工作流,下文中均可使用工作流进行描述)本质是开发者基于实际业务场景开发用于部署模型或应用的 ...

  6. SLAM中的内外点

    内外点之分最简单的说法就是是否符合当前位姿的判断:如果根据当前位姿,之前帧二维特征点所恢复出的地图点重投影到当前帧与实际的二维特征点匹配不上了,那么认为这个是质量差的点是outlier,抛弃掉,如果能 ...

  7. 要写文档了,emmm,先写个文档工具吧——DocMarkdown

    前言 之前想用Markdown来写框架文档,找来找去发现还是Jekyll的多,但又感觉不是很合我的需求 于是打算自己简单弄一个展示Markdown文档的网站工具,要支持多版本.多语言.导航.页内导航等 ...

  8. Mysql InnoDB多版本并发控制MVCC

    参考书籍<mysql是怎样运行的> 系列文章目录和关于我 一丶为什么需要事务隔离级别 mysql是一个客户端/服务断软件,对于同一个服务器来说,可以有多个客户端进行连接,每一个客户端进行连 ...

  9. 有关二级指针char **p 的问题

    int main() { char *str[] = {"welcome", "to", "Fortemdia", "Nanjin ...

  10. 你听说过OTA吗?

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/M660Sc4ey1SxCpRT6vcM9g what? 不知有多少 ...