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