2011-04-27 113 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