Component (@NotNull JList<? extends SdkListItem> list, @Nullable SdkListItem value, int index, boolean selected, boolean hasFocus) { SimpleColoredComponent component = (SimpleColoredComponent)super.getListCellRendererComponent(list, value, index, selected, hasFocus); JPanel panel = new CellRendererPanel(new BorderLayout()) { private final AccessibleContext myContext = component.getAccessibleContext(); @Override public AccessibleContext getAccessibleContext() { return myContext; } @Override public void setBorder(Border border) { // we do not want to outer UI to add a border to that JPanel // see com.intellij.ide.ui.laf.darcula.ui.DarculaComboBoxUI.CustomComboPopup#customizeListRendererComponent component.setBorder(border); } }; panel.add(component, BorderLayout.CENTER); SdkListModel model = myGetModel.produce(); //handle the selected item to show in the ComboBox, not in the popup if (index == -1) { component.setOpaque(false); panel.setOpaque(false); if (model.isSearching()) { JBLabel progressIcon = new JBLabel(AnimatedIcon.Default.INSTANCE); panel.add(progressIcon, BorderLayout.EAST); } return panel; } component.setOpaque(true); panel.setOpaque(true); panel.setBackground(list.getBackground()); if (value instanceof GroupItem) { JBLabel toggle = new JBLabel(selected ? AllIcons.Icons.Ide.MenuArrowSelected : AllIcons.Icons.Ide.MenuArrow); toggle.setOpaque(true); toggle.setBorder(JBUI.Borders.emptyRight(JBUI.scale(5))); toggle.setBackground(selected ? list.getSelectionBackground() : list.getBackground()); panel.add(toggle, BorderLayout.EAST); } String separatorTextAbove = value != null ? model.getSeparatorTextAbove(value) : null; if (separatorTextAbove != null) { SeparatorWithText separator = new SeparatorWithText(); if (!separatorTextAbove.isEmpty()) { separator.setCaption(separatorTextAbove); } OpaquePanel wrapper = new OpaquePanel(new BorderLayout()); wrapper.add(separator, BorderLayout.CENTER); wrapper.setBackground(list.getBackground()); panel.add(wrapper, BorderLayout.NORTH); } return panel; }