# JTable mit ContextMenü



## Foermchen82 (11. Feb 2010)

Hallo zusammen,

ich baue mir grad ne JTable und möchte ihr ein ContextMenü (PopUpMenü) hinzu fügen. Klappt auch alles ganz prima.
Jedoch möchte ich auch die Daten der Zeile haben, auf der Ich das ContextMenü ausführe. Nur das funktioniert nicht. Ich kann auch nicht einfach die selectedRow der Table nehmen, da entweder nichts oder etwas ganz anderes selektiert sein kann.

Wie kann ich das Problem lösen? Muss ich den MouseListener irgendwie an die Rows hängen?

Danke im voraus


----------



## Gast2 (11. Feb 2010)

Also das beste was ich bis jetzt gefunden habe war das hier

```
public class TablePopupMenuAdapter implements PopupMenuListener {
    private void maybeUpdateSelection(PopupMenuEvent e) {
        final AWTEvent awtEvent = EventQueue.getCurrentEvent();
        final MouseEvent me;
        if (!(awtEvent instanceof MouseEvent)
                || !(me = (MouseEvent) awtEvent).isPopupTrigger()) {
            return;
        }
        final JPopupMenu menu = (JPopupMenu) e.getSource();
        final Component invoker = menu.getInvoker();

        if (!(invoker instanceof JTable)) {
            return;
        }
        final JTable table = (JTable) invoker;
        final Point p = me.getPoint();
        final int row = table.rowAtPoint(p);
        final int col = table.columnAtPoint(p);
        if (row == -1 || col == -1) {
            return;
        }
        // EventUtils.isCtrlOrMetaDown(me) am besten machst hier noch so eine methode, da bei MAC
        // die Metda down Taste verwendet wird...
        table.changeSelection(row, col, me.CtrlDown(), me.isShiftDown());
    }


    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
        maybeUpdateSelection(e);
    }

    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
        maybeUpdateSelection(e);
    }

    public void popupMenuCanceled(PopupMenuEvent e) {
        maybeUpdateSelection(e);
    }
}
```

Das hängst du an dein Popupmenu
und setzt das PopMenu dann so

```
JTable#setComponentPopupMenu(popup);
```


----------

