【问题标题】:Capture hotkey in Swing在 Swing 中捕获热键
【发布时间】:2015-04-24 18:55:06
【问题描述】:

我想捕捉一些带有两个字母键的热键,例如 Ctrl+P,PCtrl+P 并在不释放 Ctrl 的情况下按 P)但下面的代码不起作用:

KeyStroke.getKeyStroke(KeyEvent.VK_P & KeyEvent.VK_P, InputEvent.CTRL_MASK)
//or
KeyStroke.getKeyStroke(KeyEvent.VK_P | KeyEvent.VK_P, InputEvent.CTRL_MASK)

它只捕获Ctrl+P

【问题讨论】:

  • 只是一个猜测,但你不应该得到两个不同的击键,第一个是Ctrl+P,第二个是P
  • @svz,是的,但是我怎么知道它们是否同时按下为 Ctrl+P,P?

标签: java swing hotkeys


【解决方案1】:

然后您需要使用两个单独的 KeyStroke 并分别捕获每个 KeyStroke。例如:

KeyStroke p = KeyStroke.getKeyStroke('P'); 
KeyStroke control = KeyStroke.getKeyStroke("control P");

阅读 How to Use Key Bindings 上的 Swing 教程部分了解更多信息。

【讨论】:

  • 如果我分别按下它们会怎样? P 还是 Ctrl+P?
  • 你确定是“P”和“控制P”吗? Ctrl+P,P == Ctrl+P 和 P 不松开 Ctrl ~~ Ctrl+P 2 次。
  • 对不起,我误解了这个问题。 Swing 不允许您在不松开控制键的情况下再次输入“P”。 KeyEvent 将跟踪所有修饰键(control、alt、shift)和输入另一个键的时间。因此,您需要编写某种自定义代码来查看是否会连续生成两个 Control+P 事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 2017-12-03
  • 1970-01-01
  • 2016-07-28
  • 2014-12-23
  • 1970-01-01
相关资源
最近更新 更多