Search code examples
javaswingjtablejpopupmenu

JPopupMenu on JTable -> Get the cell the menu was created on


I have a situation where I have a popup menu created when a JTable is right clicked on. Standard way of creating the popup menu:

aJTable.setComponentPopupMenu(rightClickMenu);

Now afterwards in the action that gets registered, I am unable to find out which cell was right clicked on to get that popup menu to appear.

rightClickMenuItem.addActionListener(new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // Work out what cell was right clicked to generate the menu
    }

});

Any ideas on how you do this?


Solution

  • @MadProgrammer's suggestion of getPopupLocation looked promising, but I couldn't work out how to get the information across between the table and the actionEvent...

    I got around this by making sure that the row was selected when you rightclicked on it -> since the popup menu prevents the selection of the row, you can add in a mouse listener that makes sure the row gets selected no matter what click (left or right) is pressed.

    aTable.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            int r = aTable.rowAtPoint(e.getPoint());
            if (r >= 0 && r < clt.getRowCount()) {
                aTable.setRowSelectionInterval(r, r);
            } else {
                aTable.clearSelection();
            }
        }
    });
    

    This means that in the rightClickMenuItem's action listener, you can grab the table's selected cell / row

    rightClickMenuItem.addActionListener(new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            aTable.get details about the selected one....
        }
    });
    

    Too easy! Thanks everyone for the help.