// runnable can be a func(O o) {} receving the selected item static JList onDoubleClick(final JList list, final O runnable) { list.addMouseListener(new MouseAdapter { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() == 2) { int idx = list.locationToIndex(evt.getPoint()); O item = list.getModel().getElementAt(idx); list.setSelectedIndex(idx); callF(runnable, item); } } }); ret list; } // runnable can be a func(O o) {} receving the selected row index static void onDoubleClick(final JTable table, final O runnable) { table.addMouseListener(new MouseAdapter { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() == 2) { int idx = table.rowAtPoint(evt.getPoint()); table.setRowSelectionInterval(idx, idx); callF(runnable, idx); } } }); } // other components get the pointer position // only reacts on left button static void onDoubleClick(JComponent c, final O runnable) { c.addMouseListener(new MouseAdapter { public void mouseClicked(MouseEvent evt) { if (evt.getButton() == 1 && evt.getClickCount() == 2) callF(runnable, evt.getPoint()); } }); }