void () { myList.getTableHeader().setDefaultRenderer(new MyHeaderCellRenderer(myList.getTableHeader().getDefaultRenderer())); myList.setDefaultRenderer(Object.class, new MyTableCellRenderer(myList.getDefaultRenderer(Object.class))); myList.resetDefaultFocusTraversalKeys(); myList.setShowGrid(false); myList.setCellSelectionEnabled(false); myList.setColumnSelectionAllowed(false); myList.setRowSelectionAllowed(true); myList.setSelectionMode(myDescriptor.isChooseMultiple() ? ListSelectionModel.MULTIPLE_INTERVAL_SELECTION : ListSelectionModel.SINGLE_SELECTION); myList.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { myPathBarActive = false; } }); new ClickListener() { @Override public boolean onClick(@NotNull MouseEvent e, int clickCount) { if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) { var idx = myList.rowAtPoint(e.getPoint()); if (idx >= 0) { myList.setRowSelectionInterval(idx, idx); var action = myList.getActionMap().get(OPEN); if (action != null) action.actionPerformed(null); return true; } } return false; } }.installOn(myList, true); myList.getActionMap().put(OPEN, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { openSelectedRow(); } }); myList.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), OPEN); TableSpeedSearch.installOn(myList); myList.getActionMap().put(TableActions.Left.ID, myList.getActionMap().get(TableActions.CtrlHome.ID)); myList.getActionMap().put(TableActions.Right.ID, myList.getActionMap().get(TableActions.CtrlEnd.ID)); myList.setTransferHandler(new TransferHandler(null) { @Override public int getSourceActions(JComponent c) { return COPY; } @Override protected Transferable createTransferable(JComponent c) { var items = myList.getSelectedObjects(); return items.isEmpty() ? null : new TextTransferable(items.stream().map(item -> item.name).collect(Collectors.joining("\n"))); } }); }