将图像添加到JList项目

时间:2011-04-27 16:34:27

标签: java

我有一个JList,我正在使用DefaultListModel,一切都很好,项目(字符串)被正确添加,但我想在每个字符串旁边的JList中添加一个图像(例如显示用户的状态)。可以有人帮我这个吗?在此先感谢。这是我添加元素的方式,我也可以添加图像吗?

private  DefaultListModel modelO = (DefaultListModel) Teacher.made_list.getModel();
((DefaultListModel) Teacher.made_list.getModel()).addElement(studName);

3 个答案:

答案 0 :(得分:7)

您必须实施ListCellRenderer(或扩展DefaultListCellRenderer)并使用getListCellRendererComponent方法返回带有图标的Jlabel

示例:

public class IconListRenderer extends DefaultListCellRenderer {
    public Component getListCellRendererComponent(
            JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {
        JLabel label = (JLabel) super.getListCellRendererComponent(
                list, value, index, isSelected, cellHasFocus);
        Icon icon = this.getIcon(list, value, index, isSelected, cellHasFocus)
        label.setIcon(icon);
        return label;
    }
    protected Icon getIcon(
            JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {
        // how do I get icon?
    }
}

您必须实施getIcon方法。

答案 1 :(得分:3)

模型用于存储数据,渲染器用于显示数据。默认渲染器可以处理字符串和图标,但如果您需要执行更多操作,则可以提供自定义渲染器。这是一个example。这是一个组合框,但JLists的渲染器是相同的。

答案 2 :(得分:0)

在这里你可以找到复杂的解决方案,包括

  • 自定义JList元素(允许从列表元素中获取图标图像)
  • 处理选择样式
  • 使用ListCellRenderer比使用扩展默认
  • 更方便

http://www.codejava.net/java-se/swing/jlist-custom-renderer-example