Java: make one jcombobox element unselected (e.g. for a subtitle) and edit the font of that element

How to make one item in combobox non-selectable because I need to separate items in a combo box with a subtopic .

And is it possible to change the font of this particular element separately?

        jComboBox_btech_course.setFont(new java.awt.Font("Tahoma", 0, 14));
        jComboBox_btech_course.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Select Course" }));
        jComboBox_btech_course.setName("");

private class theHandler implements ActionListener
{
    public void actionPerformed(ActionEvent evt) 
    {
        //BTech courses

        if(jComboBox_mtech_dept.getSelectedItem().equals("Civil Engineering"))
        {
            jComboBox_btech_course.removeAllItems();
            jComboBox_btech_course.addItem("Building Construction");
            jComboBox_btech_course.addItem("Principle And Practice");
            jComboBox_btech_course.addItem("Surveying");
            jComboBox_btech_course.addItem("Engineering Geology");
            jComboBox_btech_course.addItem("Structural Analysis");
            jComboBox_btech_course.addItem("Hydraulic Engineering");
            jComboBox_btech_course.addItem("Environmental Engineering");
            jComboBox_btech_course.addItem("Structural Design");
            jComboBox_btech_course.addItem("Geotechnical Engineering");
            /*This item has to be unselectable*/
            jComboBox_btech_course.addItem("***Sub-topic***");
            jComboBox_btech_course.addItem("Transportation Engineering");
            jComboBox_btech_course.addItem("Foundation Engineering");
            jComboBox_btech_course.addItem("Estimation & Valuation");
            jComboBox_btech_course.addItem("Hydrology & Flood Control");
            jComboBox_btech_course.addItem("System Analysis, Project Planning And Construction Management");
            jComboBox_btech_course.addItem("Irrigation Engineering");
            jComboBox_btech_course.addItem("Computer Application in Civil Engineering");
            jComboBox_btech_course.addItem("Planning, Design & Detailing");
        }
    }
}
+3
source share
3 answers

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);

        // Render item as disabled and with different font:
        setEnabled(itemEnabled);
        setFont(itemEnabled ? f1 : f2);

        return this;
    }
});
+7

, , ComboBoxEditor.

, , ,

+1

ItemListener

addItemListener(ItemListener aListener)

.

+1

All Articles