Java JList与JCheckBox

Java JList与JCheckBox,java,Java,我尝试的是使用复选框JList。我无法选择多个项目。当我这样做时,已经选中的项目将被取消选中。我错过了什么 JList recipientsList = new JList( new RecipientWrapper[] { new RecipientWrapper("apple"), new RecipientWrapper("orange"), new RecipientWrapper("mango"), new RecipientWr

我尝试的是使用复选框JList。我无法选择多个项目。当我这样做时,已经选中的项目将被取消选中。我错过了什么

JList recipientsList = new JList(
            new RecipientWrapper[] { new RecipientWrapper("apple"), new RecipientWrapper("orange"),
                new RecipientWrapper("mango"), new RecipientWrapper("paw paw"), new RecipientWrapper("banana") });
        recipientsList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        recipientsList.setCellRenderer(new CheckboxListRenderer());

      class CheckboxListRenderer implements ListCellRenderer<RecipientWrapper>
      {
        private static final long serialVersionUID = 1L;
        private JCheckBox checkBox;
        @Override
        public Component getListCellRendererComponent(JList list,RecipientWrapper value, int index, boolean isSelected,
                                                      boolean cellHasFocus)
        {
          Component c = null;
          if(value != null)
          {
            getCheckBox().setText(value.toString());
            checkBox.setSelected(isSelected);
            value.setSelected(isSelected);
            c = checkBox;
          }
          else
          {
            c = new JLabel();
          }
          return c;
        }

        private JCheckBox getCheckBox()
        {
          if(checkBox == null)
          {
            checkBox = new JCheckBox();
          }
          return checkBox;
        }
      }
JList recipientsList=新JList(
new RecipientWrapper[]{new RecipientWrapper(“苹果”),new RecipientWrapper(“橙色”),
新RecipientWrapper(“芒果”)、新RecipientWrapper(“爪子”)、新RecipientWrapper(“香蕉”)};
recipientsList.setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION);
recipientsList.setCellRenderer(新的CheckboxListRenderer());
类CheckboxListRenderer实现ListCellRenderer
{
私有静态最终长serialVersionUID=1L;
私有JCheckBox复选框;
@凌驾
公共组件GetListCellRenderComponent(JList列表、RecipientWrapper值、int索引、布尔isSelected、,
布尔单元(聚焦)
{
分量c=null;
if(值!=null)
{
getCheckBox().setText(value.toString());
复选框.setSelected(isSelected);
值。setSelected(isSelected);
c=复选框;
}
其他的
{
c=新的JLabel();
}
返回c;
}
私有JCheckBox getCheckBox()
{
如果(复选框==null)
{
复选框=新的JCheckBox();
}
返回复选框;
}
}

这是
JList
的预期行为。您需要按住CtrlShift键来选择列表中的多个值

如果您想更改此行为,您可能需要考虑使用“代码> > ActhListNeult/Cux>复选框组件,并将其跨事件持久化。

复选框。这是错误的部分。。它应该是checkBox.setSelected(value.isSelected());需要用MouseListener重新粉刷JLister。。