如何将自定义复选框添加到 JList (Java)?

How to add a custom checkbox into JList (Java)?

程序是这样的:

这就是我想要的样子:

正如你在图片中看到的那样,我已经尝试了一下,了解到我需要使用 ListCellRenderer,但问题是我已经创建了 2 个自定义 png 文件

  1. checked.png 和

  2. unchecked.png

当我每天单击 goals #1 时,它应该显示 state = true 并且 checked.png 应该出现并保持选中状态,除非我再次单击它。 Unchecked.png 可能是 jList column 上的标准配置。

我还想将我的复选框放在行尾左侧 1 厘米处(填充),遗憾的是不确定它在 java 中是如何完成的。 (看图就明白了)

在浏览了一些指南后,我了解到向 JList column 添加额外内容的唯一方法是使用 ListCellRenderer。我已经尝试了很长时间但没有成功,所以想问问别人。有没有人对如何做到这一点有任何想法?

我们的想法是通过将 Jtable 列更改为 Daily goals 并显示 X 以指示目标已实现,使其工作然后显示在 JTable 中。但我认为我应该能够做到这一点,主要问题是自定义复选框的实现。

  1. 您可以将两种类型的复选框用作 jlist 单元格渲染器,一种用于选中的单元格,另一种用于未选中的单元格。
  2. 使用 ImageIcon 用您的图像装饰复选框。
  3. 在您的 jlist 单元格渲染中,您需要有逻辑来 return 预期的复选框来渲染该列表单元格。
  4. 注意将复选框中的文本覆盖为实际的列表单元格值

    public class TestFrame extends JFrame {
    ImageIcon iconChecked = new ImageIcon(TestFrame.class.getResource("checked.png"));
    ImageIcon iconUnchecked = new ImageIcon(TestFrame.class.getResource("unchecked.png"));
    JList jList = new JList(new Object[]{"ABC", "123"});
    
    public TestFrame() {
        this.add(jList);
        jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    
    jList.setCellRenderer(new ListCellRenderer() {
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            for (int i : list.getSelectedIndices()) {
                if (index == i) {
                    JCheckBox checkBoxChecked = new JCheckBox(value.toString(), iconChecked);
                    return checkBoxChecked;
                }
            }
    
            JCheckBox checkBoxUnchecked = new JCheckBox(value.toString(), iconUnchecked);
            return checkBoxUnchecked;
        }
    });
    }}