Java 在Swing中捕获热键

Java 在Swing中捕获热键,java,swing,hotkeys,Java,Swing,Hotkeys,我想用两个字母键捕捉一些热键,如Ctrl+p,p(Ctrl+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
Ctrl+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

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

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

有关更多信息,请阅读上的Swing教程部分

只是一个猜测,但你不应该得到两个不同的按键,第一个是针对
Ctrl+p
,第二个是针对
p
?@svz,是的,但我如何知道它们是否同时被按下为Ctrl+p,p?如果我分别按下它们会怎么样?是P还是Ctrl+P?你确定是“P”和“control P”吗
Ctrl+P,P
==Ctrl+P和P,但不释放Ctrl~~Ctrl+P两次。对不起,我误解了这个问题。Swing不允许您在不释放控制键的情况下再次输入“P”。KeyEvent将跟踪所有修改器关键点(control、alt、shift)以及输入其他关键点的时间。因此,您需要编写某种自定义代码,以查看是否在一行中生成了两个Control+P事件。