我想创建带有复选框和多个选择的JComboBox。我在渲染jlist后创建了一个带复选框的列表。我不知道如何用jcombobox渲染它。或者是否可以将jlist作为下拉列表组成,如组合框。 对于jlist渲染,我使用以下代码
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类如下
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;
}
}
}
答案 0 :(得分:10)
最简单的解决方案可能是为每个选项创建一个带有JCheckBoxMenuItem
的弹出菜单,然后将该弹出菜单附加到一个按钮,该按钮显示您想要为“所选项目”显示的内容。
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);