2

我想创建带有复选框和多项选择的 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;
      }
    }
 }
4

1 回答 1

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);
于 2013-04-03T12:33:14.253 回答