5

当用户右键单击我的 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());
            }
        }
    });

每当我用鼠标右键单击触控板或使用 ctrl + 右键单击​​时,if(e.isPopupTrigger())永远不会评估为 true,并且永远不会显示菜单。我在那里有断点来验证。

我在网上做了一些研究,似乎这个解决方案应该有效。由于右键单击取决于平台,因此使用 isPopupTrigger() 应该是要走的路。

自从我使用 Mac 以来,有什么特别的事情吗?

4

1 回答 1

6

这个简单的例子对我有用,也许它会帮助你找到你的问题。我在 Mac 上,使用 Java 7。

在此处输入图像描述

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);
}
于 2013-02-07T22:46:34.547 回答