当用户右键单击我的JTable时,我正试图获得JPopUpMenu节目.在我的扩展JTable的类中,我调用以下代码:
addMouseListener(new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
rowClicked = rowAtPoint(e.getPoint());
colClicked = columnAtPoint(e.getPoint());
if (e.isPopupTrigger())
{
popUpMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
@Override
public void mouseClicked(MouseEvent e)
{
rowClicked = rowAtPoint(e.getPoint());
colClicked = columnAtPoint(e.getPoint());
if(e.isPopupTrigger())
{
popUpMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
Run Code Online (Sandbox Code Playgroud)
每当我右键单击跟踪板,使用鼠标或使用ctrl +右键单击时,if(e.isPopupTrigger())永远不会评估为true,并且菜单永远不会显示.我在那里有断点来验证.
我在网上做了一些研究,似乎这个解决方案应该有效.由于右键单击取决于平台,因此使用isPopupTrigger()应该是最佳选择.
因为我在Mac上有什么特别的东西吗?
这个简单的例子对我有用,也许它可以帮助你找到你的问题.我在使用Java 7的Mac上.

public static void main(String[] args)
{
JFrame frame = new JFrame();
JPanel panel = new JPanel();
String columnNames[] = { "Column 1", "Column 2", "Column 3" };
String dataValues[][] = { { "12", "234", "67" }, { "-123", "43", "853" }, { "93", "89.2", "109" }, { "279", "9033", "3092" } };
JTable table = new JTable(dataValues, columnNames);
panel.add(table);
final JPopupMenu menu = new JPopupMenu();
JMenuItem item = new JMenuItem("item");
menu.add(item);
table.setComponentPopupMenu(menu);
table.addMouseListener(new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger())
{
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
@Override
public void mouseClicked(MouseEvent e)
{
if (e.isPopupTrigger())
{
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)