【发布时间】:2013-12-18 09:46:55
【问题描述】:
我必须抓住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 热键。我也尝试了很多来自互联网的东西,但它没有按我的意愿工作,所以在提供任何代码之前请先测试一下。
虽然这个例子是 Scala,但 Java 也可以。
依赖:
https://github.com/tulskiy/jkeymaster
//build.scala
val jkeymaster = "com.github.tulskiy" % "jkeymaster" % "1.1"
【问题讨论】:
-
com.tulskiy....那应该是什么?你能用 Scala Swing 做一个独立的例子吗? -
@0__,抱歉我忘了。我不能只使用 Swing。
-
@0__,问题是
KeyStroke是一个 Swing 类。 -
如果有人可以执行您的示例,您获得帮助的机会会高很多