JavaFx 页面和控件设置快捷键
本文为作者原创,允许转载,不过请在文章开头明显处注明链接和出处!!! 谢谢配合~
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/17039642.html
本篇大约有2587个字,阅读预计需要3.23分钟
原文: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("按下了快捷键。。")
}
}
}
PS: 上面2和3方法看似是一样,但是第3种方法在快捷键冲突的情况下也会执行
比如说上面我们是设置了ctrl+v的快捷键,如果当页面存在有一个输入框textfield,此时你按下ctrl+v,此时两种方法的情况如下:
- accelerators: 输入框里粘贴了文本,没有触发我们设置的快捷键功能
- addEventFilter: 输入框粘贴了文本,且触发了我们设置的快捷键功能
补充-生成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键,不太明白这个..
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2022-01-10 Window资源管理器插件增强,可显示Android的apk图标