如何在JList(Java)中添加自定义复选框?

时间:2015-10-09 23:39:23

标签: java checkbox jlist

这是程序的外观:

postgres

这就是我想要的样子:

http://i.stack.imgur.com/zOFCh.png

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

  1. checked.png和

  2. unchecked.png

  3. 当我每天点击goals #1时,它应该显示state = true并且checked.png应该出现并保持检查,除非我再次点击它。 Unchecked.png可能是jList column的标准。

    我还想把我的复选框放在行尾(填充)的左边1厘米处,不确定如何在java中完成它。 (通过查看图片,你会更好地理解)

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

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

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用两种类型的复选框作为jlist单元格渲染器,一种用于选定单元格,另一种用于未选定单元格。
  2. 使用ImageIcon为您的图像装饰复选框。
  3. 在jlist单元格渲染中,您需要具有逻辑以返回预期的复选框以呈现该列表单元格。
  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;
        }
    });
    }}