void () { myList = new CheckBoxList<>() { @Override protected JComponent adjustRendering(JComponent rootComponent, JCheckBox checkBox, int index, boolean selected, boolean hasFocus) { JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder()); GutterIconDescriptor descriptor = myList.getItemAt(index); Icon icon = descriptor == null ? null : descriptor.getIcon(); JLabel label = new JLabel(icon == null ? EmptyIcon.ICON_16 : icon); label.setOpaque(true); label.setPreferredSize(new Dimension(25, -1)); label.setHorizontalAlignment(SwingConstants.CENTER); panel.add(label, BorderLayout.WEST); panel.add(checkBox, BorderLayout.CENTER); panel.setBackground(getBackground(false)); label.setBackground(getBackground(selected)); if (!checkBox.isOpaque()) { checkBox.setOpaque(true); } checkBox.setBorder(null); PluginDescriptor pluginDescriptor = myFirstDescriptors.get(descriptor); if (pluginDescriptor != null) { SeparatorWithText separator = new SeparatorWithText(); String name = getPluginDisplayName(pluginDescriptor); separator.setCaption(name); panel.add(separator, BorderLayout.NORTH); } return panel; } @Nullable @Override protected Point findPointRelativeToCheckBox(int x, int y, @NotNull JCheckBox checkBox, int index) { return super.findPointRelativeToCheckBoxWithAdjustedRendering(x, y, checkBox, index); } }; myList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); myList.setBorder(BorderFactory.createEmptyBorder()); ListSpeedSearch.installOn(myList, JCheckBox::getText); }