将图像添加到JList项目

6

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

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

5
接受一个答案,这样人们就可以知道哪个解决方案解决了你的问题。 - prolink007
请接受答案!在问题左侧标记“V”,它将变为绿色,表示这是解决方案。如果您对答案不完全满意,请在评论中说明缺少什么才能让您接受。 - Math
3个回答

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方法。


3

模型用于存储数据,渲染器用于显示数据。默认渲染器可以处理字符串和图标,但如果您需要更多的功能,可以提供自定义渲染器。这里有一个示例,虽然是针对组合框,但JLists使用的渲染器相同。


+1 链接到 Swing 教程。它有助于解决这个问题,而且该教程可以作为未来问题的资源。 - camickr
2
@Fatema Mohsen 没关系 :) 但你真的不需要感谢我们,只需点赞并标记一个答案为正确,就能让每个人都开心。 - z7sg Ѫ
澄清一下,“默认渲染器可以处理字符串和图标”意味着它可以处理*字符串或图标中的任意一种,但不能同时处理两者。至少在我的情况下是这样的。 - Bijou Trouvaille

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接