如何在 JPanel CTRL+m 中按下 keyPressed?

发布于 2024-11-16 16:20:53 字数 263 浏览 2 评论 0原文

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

@Override
public void keyPressed(KeyEvent arg0) {

}

?如果可以,怎么做?因为如果我尝试

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

它是行不通的。

I'm trying to implement a JPopupMenu over a text editor component. It should be activated on CTRL+m. Can I do that inside

@Override
public void keyPressed(KeyEvent arg0) {

}

and if yes, how? Because if I try

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

it doesn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

澜川若宁 2024-11-23 16:20:53

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

if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_M) {
    System.out.println("pressed");
    menu.setVisible(true);
}

我也无法使用带有 e.getKeyChar() 的字符来使其工作,但 getKeyCode() 对我有用。太棒了,它有效。但我是那种必须知道原因的人。所以我发现 这个

KEY_PRESSED 和 KEY_RELEASED 事件
不用于报告
字符输入。因此,价值观
此方法返回的内容有保证
仅对 KEY_TYPED 有意义
活动

At first I thought it was something to do with CTRL+M being the same thing as a carriage-return/line feed, but that wasn't true. Try:

if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_M) {
    System.out.println("pressed");
    menu.setVisible(true);
}

I couldn't get it to work using chars with e.getKeyChar() either, but the getKeyCode() works for me. Great, it works. But I'm the type that has to know why. So I found this:

KEY_PRESSED and KEY_RELEASED events
are not intended for reporting of
character input. Therefore, the values
returned by this method are guaranteed
to be meaningful only for KEY_TYPED
events

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文