我有一个 JTable 和一个特定于每一行的弹出菜单。我想计算用户右键单击鼠标(Windows L&F)以调出弹出菜单的行。
我为表创建了一个 MouseListener,因此它可以在单击时获取 MouseEvent,并在正确的位置显示弹出菜单。但是,当用户从弹出菜单中选择一个项目时,我无法找到一种方法来确定用户首先右键单击的行。弹出菜单调用的事件不再具有右键单击发生的 x,y 坐标。
我已经考虑过获取弹出窗口的位置,但它属于框架,而不是表格,因此它或其父级都没有我想要的正确的 x,y 值。
我通过子类化 JPopupMenu 并设置我希望它在 MouseListener 中具有的 x 和 y 值来解决这个问题。但在我看来,这对于任何想要在 JTable 上放置弹出菜单的人来说都是一个普遍问题,我想知道我错过了什么。
有没有一种更简单的方法来做到这一点,尤其是不涉及子类化 JPopupMenu 的方法?
JTable.rowAtPoint(...);
您可以从 MouseEvent 获取点。
Edit:
table.addMouseListener( new MouseAdapter()
{
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger())
{
JTable source = (JTable)e.getSource();
int row = source.rowAtPoint( e.getPoint() );
int column = source.columnAtPoint( e.getPoint() );
if (! source.isRowSelected(row))
source.changeSelection(row, column, false, false);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)