如何在JPopupMenu中获取焦点

6
我是一名经验丰富的Java程序员,但我对Swing还不熟悉,请多多包涵。
我希望有一个具有键盘焦点的JPopupWindow。我想要响应箭头键,Escape(关闭菜单)和Enter(调用项目)。我必须向菜单添加KeyListener并自己编写所有内容吗?还是有某种“模式”可以设置以激活此行为,这似乎应该是标准的。在标准的Swing教程中,关于JPopupMenus的部分仅涉及助记符和加速器。我不特别需要那些。
很难相信这完全违背了JPopupMenu的本意。
怎样才能最好地实现我想要的东西?
2个回答

6

一旦您执行jpopupMenu.show(Component invoker, int x, int y),它将自动按您所需响应键盘。如果这不起作用,则您可能需要修复其他问题,即某些其他组件在不应该时从菜单抢占焦点等。


嗯,我之前使用的是setVisible(true),而不是show(),但我发现show()已经被弃用,建议使用setVisible()。 - Steve Cohen
我在谈论我在代码中使用的show(Component invoker, int x, int y)方法。对于造成的困惑,非常抱歉。 - Ashwinee K Jha
那就是答案。我没有正确地绑定到一个组件上。Trashgod的回复也是必要的。谢谢你们两个。 - Steve Cohen
好吧,我说得有点早了。这个问题还没有完全解决,但已经完成了90%。箭头键按预期功能。回车键不能选择(但空格键可以),ESC键不能取消菜单。 - Steve Cohen
我已经测试过了,包括ESC/ENTER键,它对我来说运行得很好。我只是创建了一个JPopupMenu,并向其中添加了几个JMenuItems,然后在其上调用show(myButton, 0, 0)。我是在单击按钮时创建弹出菜单的。 - Ashwinee K Jha
显示剩余2条评论

3

1
谢谢,你的输入和AKJ上面的回答使得这个工作正常运行。 - Steve Cohen
很好;供参考,这里有一个最近更新的例子(链接:https://dev59.com/22435IYBdhLWcg3w7kwK#5129757)。 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接