Java 将图像添加到JList项目

Java 将图像添加到JList项目,java,Java,我有一个JList,我使用的是DefaultListModel,一切正常,项目(字符串)添加正确,但我想在每个字符串旁边的JList中添加一个图像(例如,显示用户的状态)。有人能帮我吗?提前谢谢。这是我如何添加元素的,我也可以添加图像吗 private DefaultListModel modelO = (DefaultListModel) Teacher.made_list.getModel(); ((DefaultListModel) Teacher.made_list.getModel(

我有一个JList,我使用的是DefaultListModel,一切正常,项目(字符串)添加正确,但我想在每个字符串旁边的JList中添加一个图像(例如,显示用户的状态)。有人能帮我吗?提前谢谢。这是我如何添加元素的,我也可以添加图像吗

private  DefaultListModel modelO = (DefaultListModel) Teacher.made_list.getModel();
((DefaultListModel) Teacher.made_list.getModel()).addElement(studName);
您必须实现(或扩展)并使用
getListCellRenderComponent
方法返回带有图标的
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
方法。

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

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

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

+1获取Swing教程的链接。Tt有助于解决此问题,本教程可作为未来问题的参考资料。非常感谢,此链接非常有用:)@Fatema Mohsen欢迎:)但您不必真的感谢我们,只需向上投票并将其中一个答案标记为正确将使每个人都感到高兴。为了澄清,“默认渲染器可以处理字符串和图标“表示它可以处理字符串或图标,但不能同时处理两者。至少对我来说是这样的。接受一个答案,这样人们就可以知道哪个解决方案解决了你的问题。请接受答案!在问题左侧标记
V
,它将变为绿色,这意味着这是对您有效的解决方案。如果你对答案不完全满意,请在上面发表评论,指出你所缺少的东西,让你可以接受。