Java 无法将复选框添加到JList

Java 无法将复选框添加到JList,java,swing,jlist,jcheckbox,Java,Swing,Jlist,Jcheckbox,我对编程非常陌生,无法将JCheckbox添加到JList中。没有错误,但没有显示任何内容 JFrame f=new JFrame(); String[] labels={"a","b","c","d","e"}; JCheckBox[] ch=new JCheckBox[labels.length]; JList list=new JList(); for (int i = 0; i < labels.length; i++) { ch[i]=new JCheckBox("C

我对编程非常陌生,无法将JCheckbox添加到JList中。没有错误,但没有显示任何内容

JFrame f=new JFrame();
String[] labels={"a","b","c","d","e"};
JCheckBox[] ch=new JCheckBox[labels.length];

JList list=new JList();

for (int i = 0; i < labels.length; i++) {
    ch[i]=new JCheckBox("CheckBox"+i);
    list.add(ch[i]);
}

JScrollPane pane=new JScrollPane(list);
f.add(pane);
f.setVisible(true);

JList渲染器可以绘制复选框,但JList不支持单元格编辑器。相反,考虑一列JTALE。Boolean.class类型的列的默认值是JCheckBox,例如。

JList呈现程序可以绘制复选框,但JList不支持单元格编辑器。相反,考虑一列JTALE。Boolean.class类型的列的默认值是JCheckBox,例如。

以下是您可能要查找的内容:


以上代码的源代码是

以下是您可能要查找的内容:


上述代码的源代码是

作为trashgod发布的JTable解决方案的替代方案,您还可以通过以下方式在JList中创建JCheckbox的外观:

为JList使用自定义渲染器,将每个项目显示为JCheckBox 在JList中使用一个自定义对象来保持其布尔选中状态 向JList添加一个鼠标侦听器,用于设置/取消设置每个项目的选中状态。
作为trashgod发布的JTable解决方案的替代方案,您还可以通过以下方式在JList中创建JCheckbox的外观:

为JList使用自定义渲染器,将每个项目显示为JCheckBox 在JList中使用一个自定义对象来保持其布尔选中状态 向JList添加一个鼠标侦听器,用于设置/取消设置每个项目的选中状态。
有趣的风格,和我的完全不同。有趣的风格,和我的完全不同。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class CheckBo 
{
    public static void main(String[] args) 
    {
            JFrame f=new JFrame();
            String[]labels={"a","b","c","d","e"};
            JCheckBox[]ch=new JCheckBox[labels.length];

            final DefaultListModel model = new DefaultListModel();

            JList list=new JList(model);
            list.setCellRenderer(new CheckListRenderer());
            for (int i = 0; i < labels.length; i++) {
                //ch[i]=new JCheckBox("CheckBox"+i);
                model.addElement(new CheckListItem("CheckBox"+i));
            }
            JScrollPane pane=new JScrollPane(list);
            list.addMouseListener(new MouseAdapter()
            {
                 public void mouseClicked(MouseEvent event)
                 {
                    JList list = (JList) event.getSource();
                    // Get index of item clicked
                    int index = list.locationToIndex(event.getPoint());
                    CheckListItem item = (CheckListItem)
                       list.getModel().getElementAt(index);
                    // Toggle selected state
                    item.setSelected(! item.isSelected());
                    // Repaint cell
                    list.repaint(list.getCellBounds(index, index));
                 }
            }); 
            f.add(pane);
            f.pack();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
    }
    static class CheckListItem
    {
        private String  label;
        private boolean isSelected = false;

        public CheckListItem(String label)
        {
            this.label = label;
        }
        public boolean isSelected()
        {
            return isSelected;
        } 
        public void setSelected(boolean isSelected)
        {
            this.isSelected = isSelected;
        }
        public String toString()
        {
            return label;
        }
    }

    static class CheckListRenderer extends JCheckBox implements ListCellRenderer
    {
        public Component getListCellRendererComponent(JList list, Object value, int index,boolean isSelected, boolean hasFocus)
        {
            setEnabled(list.isEnabled());
            setSelected(((CheckListItem)value).isSelected());
            setFont(list.getFont());
            setBackground(list.getBackground());
            setForeground(list.getForeground());
            setText(value.toString());
            return this;
        }
    }
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class JCheckBoxListDemo implements Runnable
{
  private JList jlist;

  public static void main(String args[])
  {
    SwingUtilities.invokeLater(new JCheckBoxListDemo());
  }

  public void run()
  {
    Object[] items = new CheckListItem[] {
        new CheckListItem("Apple"),
        new CheckListItem("Banana"),
        new CheckListItem("Carrot"),
        new CheckListItem("Date"),
        new CheckListItem("Eggplant"),
        new CheckListItem("Fig"),
        new CheckListItem("Guava"),
    };

    jlist = new JList(items);
    jlist.setCellRenderer(new CheckBoxListRenderer());
    jlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jlist.setVisibleRowCount(5);
    jlist.addMouseListener(new MouseAdapter()
    {
      @Override
      public void mouseClicked(MouseEvent event)
      {
        selectItem(event.getPoint());
      }
    });

    KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0);
    Object mapKey = keyStroke.toString();
    jlist.getInputMap().put(keyStroke, mapKey);
    jlist.getActionMap().put(mapKey, new AbstractAction()
    {
      public void actionPerformed(ActionEvent event)
      {
        toggleSelectedItem();
      }
    });

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new JScrollPane(jlist));
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }

  private void selectItem(Point point)
  {
    int index = jlist.locationToIndex(point);

    if (index >= 0)
    {
      CheckListItem item = (CheckListItem)jlist.getModel().getElementAt(index);
      item.setSelected(!item.isSelected());
      jlist.repaint(jlist.getCellBounds(index, index));
    }
  }

  private void toggleSelectedItem()
  {
    int index = jlist.getSelectedIndex();

    if (index >= 0)
    {
      CheckListItem item = (CheckListItem)jlist.getModel().getElementAt(index);
      item.setSelected(!item.isSelected());
      jlist.repaint(jlist.getCellBounds(index, index));
    }
  }

  private class CheckListItem
  {
    private Object item;
    private boolean selected;

    public CheckListItem(Object item)
    {
      this.item = item;
    }

    @SuppressWarnings("unused")
    public Object getItem()
    {
      return item;
    }

    public boolean isSelected()
    {
      return selected;
    }

    public void setSelected(boolean isSelected)
    {
      this.selected = isSelected;
    }

    @Override
    public String toString()
    {
      return item.toString();
    }
  }

  private class CheckBoxListRenderer extends JCheckBox
      implements ListCellRenderer
  {
    public Component getListCellRendererComponent(JList comp, Object value,
                     int index, boolean isSelected, boolean hasFocus)
    {
      setEnabled(comp.isEnabled());
      setSelected(((CheckListItem) value).isSelected());
      setFont(comp.getFont());
      setText(value.toString());

      if (isSelected)
      {
        setBackground(comp.getSelectionBackground());
        setForeground(comp.getSelectionForeground());
      }
      else
      {
        setBackground(comp.getBackground());
        setForeground(comp.getForeground());
      }

      return this;
    }
  }
}