Java Combobox With Buttons

How to Add Buttons to a Combobox In Java Netbeans

How to Add Buttons to a Combobox In Java Netbeans


In this Java Tutorial we will see How To Create a JCombobox With Buttons Inside It In Java Using Netbeans.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.





Project Source Code:


package new_tutorials;

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/**
 *
 * @author 1BestCsharp
 */
public class ButtonsComboboxFrame extends JFrame{

    private ButtonComboboxElement selectedItem;
    private JComboBox<ButtonComboboxElement> comboBox;
    private final JLabel selectedLabel;
    
    
    public ButtonsComboboxFrame(){
        
        // set up the frame
        setTitle("Buttons-Combobox");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        
        // create the combobox
        comboBox = new JComboBox<>();
        // set the renderer to the combobox
        comboBox.setRenderer(new ButtonComboboxRenderer());
        // add items to the combobox
        comboBox.addItem(new ButtonComboboxElement("Apple", true));
        comboBox.addItem(new ButtonComboboxElement("Tomato", false));
        comboBox.addItem(new ButtonComboboxElement("Orange", false));
        comboBox.addItem(new ButtonComboboxElement("Potato", false));
        comboBox.addItem(new ButtonComboboxElement("Banana", false));
        
        // Set the first item as the default selection
        selectedItem = (ButtonComboboxElement) comboBox.getItemAt(0);
        selectedItem.setSelected(true);
        
        // Add an item listener to handle item state changes
        comboBox.addItemListener((e) -> {
           
            ButtonComboboxElement newElement = (ButtonComboboxElement) comboBox.getSelectedItem();
            
            if(selectedItem != null){ selectedItem.setSelected(false); }
            
            if(newElement != null){ 
                newElement.setSelected(true);
                selectedItem = newElement;
            }
            
            // Update the selected label and repaint the combo box
            updateSelectedLabel();
            comboBox.repaint();
        });
        
        add(comboBox);
        selectedLabel = new JLabel("Selected Item: " + selectedItem.getLabel());
        add(selectedLabel);
        setSize(300,300);
        setLocationRelativeTo(null);
        
    }
    
    // Method to update the selected label text
    public void updateSelectedLabel(){
        selectedLabel.setText("Selected Item: " + (selectedItem != null ? selectedItem.getLabel() : ""));
    }
    
    
    
    // Inner class representing an element in the combobox
    public static class ButtonComboboxElement{
        private final String label;
        private boolean selected;
        
        // Constructor
        public ButtonComboboxElement(String label, boolean selected){
            this.label = label;
            this.selected = selected;
        }
        
        // Getters and Setters
        public String getLabel(){ return label; }
        
        public boolean isSelected(){ return selected; }
        
        public void setSelected(boolean selected){
            this.selected = selected;
        }
        
    }
    
    // Inner class serving as the renderer for the combobox items
    private class ButtonComboboxRenderer extends JButton implements ListCellRenderer<ButtonComboboxElement>{

        private final int BUTTON_MARGIN = 5;
        
        public ButtonComboboxRenderer(){
            setMargin(new Insets(BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_MARGIN));
        }
        
        
        @Override
        public Component getListCellRendererComponent(JList<? extends ButtonComboboxElement> list, ButtonComboboxElement value, int index, boolean isSelected, boolean cellHasFocus) {
            
            setEnabled(list.isEnabled());
            setText(value.getLabel());
            
            return this;
        }
        
    }
    
    
    public static void main(String[] args) {
        ButtonsComboboxFrame frame = new ButtonsComboboxFrame();
        frame.setVisible(true);
    }
}
  
  
    

The Final Result:

Java ComboBox with BUTTONS






Share this

Related Posts

Latest
Previous
Next Post »