ListCellRenderer () { return new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { final JPanel panel = new JPanel(new BorderLayout()); panel.setOpaque(true); panel.setBorder(JBUI.Borders.emptyRight(5)); final Color bg = isSelected ? UIUtil.getListSelectionBackground(true) : UIUtil.getListBackground(); panel.setBackground(bg); if (value instanceof ChooseByNameItem item) { final Color fg; fg = isSelected ? NamedColorUtil.getListSelectionForeground(true) : UIUtil.getListForeground(); final JLabel actionLabel = new JLabel(item.getName(), null, LEFT); actionLabel.setBackground(bg); actionLabel.setForeground(fg); actionLabel.setFont(actionLabel.getFont().deriveFont(Font.BOLD)); actionLabel.setBorder(JBUI.Borders.emptyLeft(4)); panel.add(actionLabel, BorderLayout.WEST); String description = item.getDescription(); if (description != null) { // truncate long descriptions final String normalizedDesc; if (description.length() > MAX_DESC_LENGTH) { normalizedDesc = description.substring(0, MAX_DESC_LENGTH) + ELLIPSIS_SUFFIX; } else { normalizedDesc = description; } final JLabel descriptionLabel = new JLabel(normalizedDesc); descriptionLabel.setBackground(bg); descriptionLabel.setForeground(fg); descriptionLabel.setBorder(JBUI.Borders.emptyLeft(15)); panel.add(descriptionLabel, BorderLayout.EAST); } } else { // E.g. "..." item @NlsSafe String text = value.toString(); final JLabel actionLabel = new JLabel(text, null, LEFT); actionLabel.setBackground(bg); actionLabel.setForeground(UIUtil.getListForeground()); actionLabel.setFont(actionLabel.getFont().deriveFont(Font.PLAIN)); actionLabel.setBorder(JBUI.Borders.emptyLeft(4)); panel.add(actionLabel, BorderLayout.WEST); } return panel; } }; }