当前位置: 首页 > 面试题库 >

赶上“双”热键

盖和洽
2023-03-14
问题内容

我必须接一个热键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应该很快。但是我认为我走错了路,因为这会使事情变得非常复杂。

你的想法?PS那里没有窗口,它捕获了 全局
热键。我还尝试了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的东西,我想您可以将其包装在a Promise或其他东西中。



 类似资料:
  • 问题内容: 我正在为已经存在很长时间的应用程序编写单元测试。我需要测试的一些方法是这样构建的: 如果要测试这些方法,则必须在单元测试中编写如下代码: 这样做是一种好习惯吗?还是有其他方法可以测试这些方法? 我在Internet上进行了一些研究,发现了一些带有和的注释解决方案,但这是行不通的(Eclipse不断在测试中显示错误行)。我不知道这些是否是好的解决方案,因为对于整个单元测试而言,我还是一个

  • 问题内容: 我听到这样的观点,您应该完全避免使用try / catch,因为它占用很多资源。那么诺言错误处理会更快吗?还是没关系? UPD :我知道try / catch在内部的异步代码中不起作用。我只是在想是否由于性能问题而有任何避免使用try / catch的理由?以上两种方法之间有什么区别吗? UPD2 :试着跑我的马:) https://jsperf.com/try-catch-vs- p

  • 本文向大家介绍keepalived双机热备nginx的配置方法,包括了keepalived双机热备nginx的配置方法的使用技巧和注意事项,需要的朋友参考一下 nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽然用docker跑nginx集群更方便,

  • #我的实习日记# 🕒 岗位/笔试时间 从三月份就开始投简历,一直被挂,五月份的时候 找了一个日常实习,然后骑驴找马接着投,六月底锐捷网络开,应该算最晚一批开的了,我赶紧投了,现在快七月份了,终于拿到了锐捷网络的offer,感谢锐捷网络 总结经验: 1. 不要气馁和丧失信心,心态放好 2. 硕士还是尽量找和自己研究方向相关的,如果找后端开发的话,除非是技术大佬,否则和项目很多的本科生比起来并没有什

  • 问题内容: 我正在申请作为Java开发人员的工作。直到2001年,我才用Java编写了一些业余应用程序,此后,我主要使用c ++和其他语言工作。同时,感觉Java增长了很多,我不知道有各种各样的缩写(EJB,spring等)。 在哪里可以找到Java最近(五年)开发的简洁明了的解释?需要了解哪些关键要素? 问题答案: 2001年?哇,时代变了。那是什么?Java 1.3? 首先,语言特点: 泛型:

  • 问题内容: 我正在尝试熟悉Swift 2和iOS 9 的新声明 我的问题是,当NSURLSession发生错误时,data参数返回nil,而错误返回某些信息。在iOS 8中,这是预期的功能,我们只使用了if语句来查找Data是否为nil。 但是 ,有了,我想到了一个new 关键字,它旨在查看是否可以正常工作,如果不能正常工作,则默认为所编写的任何代码 但是,由于数据为零,所以我遇到了意外崩溃。这是