程序如下:
这就是我想要的样子:
正如你在图片中看到的,我尝试了一下并了解到我需要使用ListCellRenderer
,但问题是我创建了 2 个自定义 png 文件
checked.png 和
unchecked.png
当我点击每日goals #1
时,它应该给出state = true
并且checked.png
应该出现并保持选中状态,除非我再次点击它。 Unchecked.png
可以是 jList 列
上的标准。
我还想将我的复选框放置在行尾左侧 1 厘米处(填充),遗憾的是不确定它在 java 中是如何完成的。 (看图你就更明白了)
在浏览了一些指南后,我了解到向 JList 列
添加额外内容的唯一方法是使用 ListCellRenderer
。我尝试了很长一段时间都没有成功,所以想问问其他人。有人对如何做到这一点有任何想法吗?
我们的想法是让它工作,然后通过将 Jtable 列更改为每日目标并显示 X 来指示目标已实现,将其显示在 JTable 中。但我认为我应该能够做到这一点,主要问题是自定义复选框的实现。
最佳答案
- 您可以将两种类型的复选框用作 jlist 单元格渲染器,一种用于选定的单元格,另一种用于未选定的单元格。
- 使用 ImageIcon 用您的图像装饰复选框。
- 在 jlist 单元格渲染中,您需要具有返回预期复选框以渲染该列表单元格的逻辑。
注意将复选框中的文本覆盖为实际列表单元格值
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; } }); }}
关于java - 如何将自定义复选框添加到 JList (Java) 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33048629/