how to create jcombobox with jcheck box and multiple selection

11,832

The simplest solution might be to create a popup menu with a JCheckBoxMenuItem for each option, and then attach that popup menu to a button that displays whatever you would want to show for the "selected item".

final JPopupMenu menu = new JPopupMenu();
menu.add(new JCheckBoxMenuItem("Other Court"));
menu.add(new JCheckBoxMenuItem("Tribunal Court"));
menu.add(new JCheckBoxMenuItem("High Court"));
menu.add(new JCheckBoxMenuItem("Supreme Court"));

final JButton button = new JButton();
button.setAction(new AbstractAction("Court") {
    @Override
    public void actionPerformed(ActionEvent e) {
        menu.show(button, 0, button.getHeight());
    }
});

JFrame frame = new JFrame();
frame.getContentPane().add(button);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Share:
11,832
adesh singh
Author by

adesh singh

Application Programmer (Java , Python ) , Freelancer and Youtuber I publish programming related videos Link to my Youtube Channel: https://www.youtube.com/c/techyadesh

Updated on June 04, 2022

Comments

  • adesh singh
    adesh singh almost 2 years

    I want to create JComboBox with checkboxes and multiple selection . i have created a list with check box after rendering the jlist . I dont know how to render it with jcombobox . Or is it possible to make jlist as drop down list like combo box . for jlist rendering i am using the following code

      DefaultListModel listModel = new DefaultListModel();
        ListCheckBox li= new ListCheckBox(listModel);
        JScrollPane jsp= new JScrollPane(li);
        add(jsp);
    
        listModel.add(0,new JCheckBox("Other Court"));
    
        listModel.add(0,new JCheckBox("Tribunal Court"));
    
        listModel.add(0,new JCheckBox("High Court"));
       listModel.add(0,new JCheckBox("Supreme Court"));
    

    ListCheck Box class is as following

     import javax.swing.*;
     import javax.swing.border.*;
     import java.awt.*;
     import java.awt.event.*;
    
     public class ListCheckBox extends JList
    {
    protected static Border noFocusBorder =
     new EmptyBorder(1, 1, 1, 1);
    
    public ListCheckBox(DefaultListModel model)
    
    
      {
    
       super(model)  ;
       setCellRenderer(new CellRenderer());
    
        addMouseListener(new MouseAdapter()
         {
            public void mousePressed(MouseEvent e)
            {
               int index = locationToIndex(e.getPoint());
    
               if (index != -1) {
                  JCheckBox checkbox = (JCheckBox)
                              getModel().getElementAt(index);
    
    
    
                  checkbox.setSelected(
                                     !checkbox.isSelected());
                  repaint();
                }
              }
            }
          );
    
         setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
       }
    
       protected class CellRenderer implements ListCellRenderer
       {
       public Component getListCellRendererComponent(
        JList list, Object value, int index,
        boolean isSelected, boolean cellHasFocus)
         {  JCheckBox checkbox = (JCheckBox) value;
         checkbox.setBackground(isSelected ?
          getSelectionBackground() : getBackground());
         checkbox.setForeground(isSelected ?
         getSelectionForeground() : getForeground());
         checkbox.setEnabled(isEnabled());
         checkbox.setFont(getFont());
         checkbox.setFocusPainted(false);
         checkbox.setBorderPainted(true);
         checkbox.setBorder(isSelected ?
          UIManager.getBorder(
           "List.focusCellHighlightBorder") : noFocusBorder);
          return checkbox;
          }
        }
     }
    
  • adesh singh
    adesh singh about 11 years
    this hides the combobox on a single item selection but i want it should stop till the user doesnt click on combo box again
  • Russell Zahniser
    Russell Zahniser about 11 years
    You can do this by just reopening the menu when one of the items is clicked on.