gpt4 book ai didi

java - 捕获 "double"热键

转载 作者:行者123 更新时间:2023-11-30 09:14:42 24 4
gpt4 key购买 nike

我必须捕获 Ctrl+Alt+C, C 的热键(意思是,按 Ctrl+Alt+C,只释放 C 并再次按下)。这是我正在尝试做的事情:

import com.tulskiy.keymaster.common._
import java.awt.event._
import javax.swing.KeyStroke

class KeysCatcher {

val provider = Provider.getCurrentProvider(true)
val ctrlC = KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK + ActionEvent.ALT_MASK)

val listener = new HotKeyListener() {
def onHotKey(hotKey: HotKey): Unit = {
hotKey.keyStroke match {
case `ctrlC` =>
println("Ctrl+Alt+C 1 was pressed")

val listener2 = new HotKeyListener() {
def onHotKey(hotKey: HotKey): Unit = {
hotKey.keyStroke match {
case `ctrlC` => println("Ctrl+Alt+C 2 was pressed")
}
}
}

provider.register(ctrlC, listener2)
}
}
}

provider.register(ctrlC, listener)
}

我的想法是,一旦按下 Ctrl+Alt+C,我就必须再次注册相同的热键并捕获它。我打算使用一个计时器,因为第二次按下 C 应该很快。但我认为我采取了错误的方式,因为它会变得非常复杂。

你的想法?附言那里没有窗口,它捕捉到一个global 热键。我也尝试了很多来自 Internet 的东西,但没有达到我想要的效果,所以在向我提供任何代码之前,请对其进行测试。

虽然这个例子是 Scala,但 Java 也可以。

依赖:

https://github.com/tulskiy/jkeymaster

//build.scala
val jkeymaster = "com.github.tulskiy" % "jkeymaster" % "1.1"

最佳答案

您只能注册一个全局热键一次,但您可以在处理程序中多次接收它的事件。所以基本的想法是保存你最后一次看到这个键的时间,如果两次出现在某个延迟之间,你可以双击:

    var last = 0l
val listener = new HotKeyListener() {
def onHotKey(hotKey: HotKey): Unit = {
hotKey.keyStroke match {
case `ctrlC` =>
if (System.currentTimeMillis() - last < 700) // arbitrary delay of 700 ms
println("We have a double click!")
else last = System.currentTimeMillis()
}
}
}

如果你想要不带 var 的东西,我想你可以将它包装在 Promise 或其他东西中。

关于java - 捕获 "double"热键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20332472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com