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

この簡単な例は私にとってはうまくいきます。おそらく、問題を特定するのに役立ちます。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);
}
于 2013-02-07T22:46:34.547 に答える