2011-04-27 155 views
5

我有一个JList和我使用DefaultListModel,一切都很好,该项目(字符串)正确添加,但我想在JList中添加的每个字符串旁边的图像(egto显示用户的状态)。任何人都可以帮我解决这个问题吗?在此先感谢。以下是我如何添加元素,我是否也可以添加图像?图像添加到一个JList项目

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

接受一个答案,从而人们可以知道哪个解决方案解决了您的问题。 – prolink007 2011-08-26 01:33:41

+0

请接受答案!标记问题左侧的'V',它会变成绿色,这意味着这是适合你的解决方案。如果您对答案不满意,请发表评论,说明缺少的内容可以被您接受。 – Math 2013-10-11 13:32:33

回答

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

+0

非常感谢你:) – 2011-04-27 18:41:33

3

该模型被用于存储数据,以及渲染用于显示的数据。默认渲染器可以处理字符串和图标,但如果你需要做的还不止这些,你可以提供自定义渲染器。这是一个example。它用于组合框,但渲染器对于JLists是相同的。

+0

+1的链接Swing指南。 Tt可以帮助解决这个问题,该教程可以作为未来问题的资源。 – camickr 2011-04-27 17:39:00

+0

非常感谢你,链接是真正有用的:) – 2011-04-27 18:42:00

+2

@Fatema穆赫辛欢迎你:)但你并不真的需要感谢我们,只是给予好评和标记正确将让所有人都满意的答案之一。 – 2011-04-28 11:32:01