// runnable can be a func(O o) {} receving the selected item static JList onDoubleClick(final JList list, final O runnable) { swing { 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 JTable onDoubleClick(final JTable table, final O runnable) { swing { 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); } } }); } ret table; } // other components get the pointer position // only reacts on left button static void onDoubleClick(final JComponent c, final O runnable) { swing { c.addMouseListener(new MouseAdapter { public void mouseClicked(MouseEvent evt) { if (evt.getButton() == 1 && evt.getClickCount() == 2) callF(runnable, evt.getPoint()); } }); } }