Component (JList list, JCheckBox checkbox, int index, boolean isSelected, boolean cellHasFocus) { Color textColor = getForeground(isSelected); Color backgroundColor = getBackground(isSelected); Font font = getFont(); checkbox.setBackground(backgroundColor); checkbox.setForeground(textColor); checkbox.setEnabled(isEnabled() && isEnabled(index)); checkbox.setFont(font); checkbox.setFocusPainted(false); checkbox.setBorderPainted(false); checkbox.setOpaque(true); String auxText = getSecondaryText(index); JComponent rootComponent; if (auxText != null) { JPanel panel = new JPanel(new BorderLayout()); panel.add(checkbox, BorderLayout.LINE_START); JLabel infoLabel = new JLabel(auxText, SwingConstants.RIGHT); infoLabel.setBorder(JBUI.Borders.emptyRight(checkbox.getInsets().left)); infoLabel.setFont(UIUtil.getFont(UIUtil.FontSize.SMALL, font)); panel.add(infoLabel, BorderLayout.CENTER); panel.setBackground(backgroundColor); infoLabel.setForeground(isSelected ? textColor : JBColor.GRAY); infoLabel.setBackground(backgroundColor); rootComponent = panel; } else { rootComponent = checkbox; } rootComponent.setBorder(isSelected ? mySelectedBorder : myBorder); boolean isRollOver = checkbox.getModel().isRollover(); rootComponent = adjustRendering(rootComponent, checkbox, index, isSelected, cellHasFocus); checkbox.getModel().setRollover(isRollOver); return rootComponent; }