我有一个静态JPopupMenu
,我创建并分配键绑定以使用:
JMenuItem mItem = new MenuItem( "name" );
mItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_W, ActionEvent.CTRL_MASK ) );
通过执行以下JPopupMenu
操作将其添加到 a :JTable
JTable table = new JTable();
table.add( popupMenu );
我还添加了一个MouseListener
来JTable
触发弹出菜单:
table.addMouseListener( mListener );
我重写mouseReleased( MouseEvent me )
以通过以下方式添加用于显示弹出菜单的操作:
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
调用以下行后组件已从表中删除:
popupMenu.show( me.getComponent(), me.getX(), me.getY() );
这种行为有原因吗?在各种不同的方法之后,我似乎无法找出发生了什么。我也尝试过使用:
table.setComponentPopupMenu(myPopupMenu);
但是通过执行上述操作,尽管菜单将显示快捷方式,但除非弹出菜单可见,否则这些快捷方式永远不会起作用。
如果这可能与分配的键绑定有任何关系,我正在 Windows 8 上运行。
非常感谢任何帮助,我确实在 和 上使用了单独KeyListener
的JTable
,JPopupMenu
但这意味着分配所有快捷方式两次,一次在弹出窗口上,一次在单独的KeyListener
. 在让它与它一起工作之后,JPopupMenu
我现在希望能够找出为什么快捷方式只在显示菜单之前(和期间)工作。即使我不单击弹出菜单中的项目,快捷方式在菜单隐藏后也将不起作用。
谢谢你。