原文: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. 简读《ASP.NET Core技术内幕与项目实战》之3:配置

    特别说明:1.本系列内容主要基于杨中科老师的书籍<ASP.NET Core技术内幕与项目实战>及配套的B站视频视频教程,同时会增加极少部分的小知识点2.本系列教程主要目的是提炼知识点,追求 ...

  2. C语言爱心表白程序

    #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> ...

  3. 如何在.NET程序崩溃时自动创建Dump?

    今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示: 首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出.现场已经无法使 ...

  4. 论文笔记 - RETRIEVE: Coreset Selection for Efficient and Robust Semi-Supervised Learning

    Motivation 虽然半监督学习减少了大量数据标注的成本,但是对计算资源的要求依然很高(无论是在训练中还是超参搜索过程中),因此提出想法:由于计算量主要集中在大量未标注的数据上,能否从未标注的数据 ...

  5. Intel GPU Gen 9 架构

    * 参考spec:the-compute-architecture-of-intel-processor-graphics-gen9-v1d0.pdf SOC 架构 Gen9 架构是早期用在igpu ...

  6. ThreadLocal的介绍与运用

    ThreadLocal全面解析 学习目标 了解ThreadLocal的介绍 掌握ThreadLocal的运用场景 了解ThreadLocal的内部结构 了解ThreadLocal的核心方法源码 了解T ...

  7. C语言白盒测试讲义

    好久没有做过C语言的白盒测试了,估计以后也没这个机会.把自己之前参加过的培训素材做个分享. 素材下载链接:https://pan.baidu.com/s/1LPD9Az04zEj8RuCICaKYxQ ...

  8. 用于数据科学的顶级 C/C++ 机器学习库整理

    用于数据科学的顶级 C/C++ 机器学习库整理 介绍和动机--为什么选择 C++ C++ 非常适合 动态负载平衡. 自适应缓存以及开发大型大数据框架 和库.Google 的MapReduce.Mong ...

  9. 嵌入式-C语言基础:快速选择排序实现从大到小排序

    #include<stdio.h> int main() { /*简单选择排序:从大到小:一共比较sizeArr-1轮,每一轮的第一个数是arr[i],第一个数依次和它后面的每个数比较*/ ...

  10. 6、将两个字符串连接起来,不使用strcat函数

    /* 将两个字符串连接起来,不使用strcat函数 */ #include <stdio.h> #include <stdlib.h> void strCat(char *pS ...