Preface: in the proposed solution, I assume that you want to disable elements starting with "**". You can change this logic as you want. In the improved version, the class MyComboModel(see below) can even store which elements are disabled, allowing you to mark marked arbitrary elements.
2 :
1. ,
ComboBoxModel setSelectedItem() , :
class MyComboModel extends DefaultComboBoxModel<String> {
public MyComboModel() {}
public MyComboModel(Vector<String> items) {
super(items);
}
@Override
public void setSelectedItem(Object item) {
if (item.toString().startsWith("**"))
return;
super.setSelectedItem(item);
};
}
, JComboBox:
JComboBox<String> cb = new JComboBox<>(new MyComboModel());
2.
ListCellRenderer getListCellRendererComponent() :
Font f1 = cb.getFont();
Font f2 = new Font("Tahoma", 0, 14);
cb.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof JComponent)
return (JComponent) value;
boolean itemEnabled = !value.toString().startsWith("**");
super.getListCellRendererComponent(list, value, index,
isSelected && itemEnabled, cellHasFocus);
setEnabled(itemEnabled);
setFont(itemEnabled ? f1 : f2);
return this;
}
});