带三个组件的Java GUI Swing Jlist
我需要使用三个组件创建Java Swing JList
。带三个组件的Java GUI Swing Jlist
每个JList行应该有一个JCheckBox,一个ImageIcon和一个JLabel。 问题是JLabel只能有两个元素。所以我需要一个梅索德添加JCheckBox的...
的jList由三个部分组成: -
在没有任何真实的信息,我可以建议最好由具有看看Concepts: Editors and Renderers开始, Writing a Custom Cell Renderer细胞如何呈现工作。
根据您的基本要求,您需要从某种类型的容器类开始,然后向其中添加组件,然后每次使用它提供的数据调用getListCellRendererComponent
时,需要填充组件的值。
您还需要照顾的选择渲染的,因为这是通常由DefaultListCellRenderer
举个例子照顾......
public static class CustomListCellRenderer extends JPanel implements ListCellRenderer<Data> {
private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
private JCheckBox checkBox;
private JLabel label;
public CustomListCellRenderer() {
setOpaque(false);
setLayout(new FlowLayout(FlowLayout.LEFT));
setBorder(DEFAULT_NO_FOCUS_BORDER);
checkBox = new JCheckBox();
label = new JLabel();
checkBox.setOpaque(false);
add(checkBox);
add(label);
}
@Override
public Component getListCellRendererComponent(JList<? extends Data> list, Data value, int index, boolean isSelected, boolean cellHasFocus) {
checkBox.setSelected(value.isSelecetd());
label.setIcon(new ImageIcon(value.getImage()));
label.setText(value.getText());
Color fg = list.getForeground();
if (isSelected) {
setBackground(list.getSelectionBackground());
fg = list.getSelectionForeground();
}
label.setForeground(fg);
setOpaque(isSelected);
Border border = null;
if (cellHasFocus) {
if (isSelected) {
border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder("List.focusCellHighlightBorder");
}
} else {
border = DEFAULT_NO_FOCUS_BORDER;
}
setBorder(border);
return this;
}
}
upvote for my little pony – BRHSM
非常感谢! 此代码适合我。我编辑了一下,但它的工作原理!我太高兴了。谢谢 –
你知道我看着这个问题并问我自己这个问题 - 有什么理由会让任何人不满吗?它在哪些方面不回答OP问题?怎样才能改善答案?由于没有提供新的答案,我只能假设:1 - 你不明白这个问题; 2-你不明白答案3-你不知道如何解决这个问题 – MadProgrammer
'JTable'来去提醒。首先查看[Concepts:Editors and Renderers](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender)和[Writing a Custom Cell Renderer](http:/ /docs.oracle.com/javase/tutorial/uiswing/components/list.html#renderer)获得更多想法 – MadProgrammer
*“问题是JLabel只能有两个元素” - - 没有意义 – MadProgrammer
谢谢 我的意思是你可以创建一个自定义单元格渲染器,并可以从jlabel扩展,它可以有一个图标和一个文本。但我也需要一个复选框。 所以我试图创建一个自定义的JComponent ... –