首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPopup密钥绑定只能工作一次

JPopup密钥绑定只能工作一次
EN

Stack Overflow用户
提问于 2013-11-08 23:28:59
回答 1查看 206关注 0票数 0

我有一个静态JPopupMenu,我使用以下命令创建并分配了键绑定:

代码语言:javascript
复制
JMenuItem mItem = new MenuItem( "name" );
mItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_W, ActionEvent.CTRL_MASK ) );

通过执行以下操作将此JPopupMenu添加到JTable

代码语言:javascript
复制
JTable table = new JTable();
table.add( popupMenu );

我还向JTable添加了一个MouseListener,以触发弹出菜单:

代码语言:javascript
复制
table.addMouseListener( mListener );

我覆盖了mouseReleased( MouseEvent me ),以添加用于以以下方式显示弹出菜单的操作:

代码语言:javascript
复制
private void checkPopupTrigger( MouseEvent me )
        {
            if ( me.isPopupTrigger() )
            {
                JTable source = (JTable)me.getSource();
                int row = source.rowAtPoint( me.getPoint() );
                int column = source.columnAtPoint( me.getPoint() );

                if (! source.isRowSelected(row))
                    source.changeSelection(row, column, false, false);

                popupMenu.show( me.getComponent(), me.getX(), me.getY() );
            }

        }

我的问题是,在第一次加载快捷键将工作良好,它将工作而不是JPopupMenu打开&因此,不需要右击和显示菜单,如果你已经知道你想要按的快捷键。如果我右击弹出菜单,弹出菜单显示出来,一旦弹出菜单不可见,截图将不再起作用。

如果我检查我的JTable实例(在Eclipse IDE中),在调用下面的代码行之后,实际上似乎JPopupMenu组件已经从表中删除了:

代码语言:javascript
复制
popupMenu.show( me.getComponent(), me.getX(), me.getY() );

这种行为是有原因的吗?在各种不同的方法之后,我似乎找不到发生了什么。我也尝试过使用:

代码语言:javascript
复制
table.setComponentPopupMenu(myPopupMenu);

但是,通过以上操作,尽管菜单将显示快捷方式,但除非弹出菜单可见,否则这些快捷方式永远不会起作用。

我在Windows8上运行,如果这可能与分配的键绑定相关。

任何帮助都是非常感谢的,我确实在JTableJPopupMenu上使用了一个单独的KeyListener来工作,但这意味着分配所有的快捷键两次,一次在弹出窗口上,另一次用于单独的KeyListener。在让它只与JPopupMenu一起工作之后,我现在希望能够找出为什么快捷键只能在菜单显示之前(和期间)工作。即使我没有点击弹出菜单中的项目,在菜单被隐藏后,快捷方式也不会起作用。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-09 00:21:36

但通过执行上述操作,尽管菜单将显示快捷方式,但除非弹出菜单可见,否则这些快捷方式永远不会起作用。

这是正确的行为。只有当组件可见时,加速器才能工作。因此,除非弹出窗口可见,否则加速器将无法工作。

如果您希望加速器始终工作,那么您应该使用包含加速器的JMenus和JMenuItems的JMenuBar。我喜欢这种方法,因为如果为每个加速器提供了自己的文档。

或者,另一种方法是为所有加速器手动添加Key Bindings。这是实现JTable的所有默认操作的方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19862673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档