Swing 如何在JPanel CTRL+;M

Swing 如何在JPanel CTRL+;M,swing,jpanel,onkeypress,Swing,Jpanel,Onkeypress,我正在尝试在文本编辑器组件上实现JPopupMenu。它应该在CTRL+m上激活。我可以在里面做吗 @Override public void keyPressed(KeyEvent arg0) { } 如果是,怎么做?因为如果我尝试 if(arg0.isControlDown()&&arg0.getKeyChar()=='m') 它不起作用。起初,我认为这与CTRL+M与回车/换行是同一回事,但事实并非如此。尝试: if(e.isControlDown() &&a

我正在尝试在文本编辑器组件上实现JPopupMenu。它应该在CTRL+m上激活。我可以在里面做吗

@Override
public void keyPressed(KeyEvent arg0) {

}
如果是,怎么做?因为如果我尝试

if(arg0.isControlDown()&&arg0.getKeyChar()=='m')

它不起作用。

起初,我认为这与CTRL+M与回车/换行是同一回事,但事实并非如此。尝试:

if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_M) {
    System.out.println("pressed");
    menu.setVisible(true);
}
我也无法将chars与e.getKeyChar()一起使用,但是getKeyCode()对我来说很有用。太好了,它起作用了。但我是那种必须知道原因的人。所以我发现:

按键按下和按键释放事件 不用于报告 字符输入。因此 此方法返回的值是有保证的 仅对键入的键有意义 事件


起初,我认为这与CTRL+M与回车/换行是一样的,但事实并非如此。尝试:

if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_M) {
    System.out.println("pressed");
    menu.setVisible(true);
}
我也无法将chars与e.getKeyChar()一起使用,但是getKeyCode()对我来说很有用。太好了,它起作用了。但我是那种必须知道原因的人。所以我发现:

按键按下和按键释放事件 不用于报告 字符输入。因此 此方法返回的值是有保证的 仅对键入的键有意义 事件


两个条件(ctrlDown或KeyChar)中的哪一个为假?此外,您确定调用了keyPressed方法吗?文本编辑器组件是否具有键盘焦点?这两个条件都必须为true。我需要按下CTRL+M键。是的,它叫。如果我试着单独按CTRL键,它就可以工作。只有按CTRL键,它怎么能工作?在您的条件中有一个&,两个值都必须为true。这就是您的问题的答案:“您确定调用了keyPressed方法吗?”是的,如果我只使用ctrl来测试它,它会工作。问题是当按下ctrl键时,arg0.getKeyChar()即使按下m也只是空的。根据Java API()可能是一个案例问题(尝试使用“m”而不是“m”),但是如果getKeyChar返回空值,a真的不知道。对不起,两个条件(ctrlDown或KeyChar)中哪一个是假的?此外,您确定调用了keyPressed方法吗?文本编辑器组件是否具有键盘焦点?这两个条件都必须为true。我需要按下CTRL+M键。是的,它叫。如果我试着单独按CTRL键,它就可以工作。只有按CTRL键,它怎么能工作?在您的条件中有一个&,两个值都必须为true。这就是您的问题的答案:“您确定调用了keyPressed方法吗?”是的,如果我只使用ctrl来测试它,它会工作。问题是当按下ctrl键时,arg0.getKeyChar()即使按下m也只是空的。根据Java API()可能是一个案例问题(尝试使用“m”而不是“m”),但是如果getKeyChar返回空值,a真的不知道。很抱歉