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