2009-12-04 57 views
0

我正在使用Netbeans來開發我的Java應用程序。我想顯示帶有圖標的項目列表。我已經使用ListCellRendere r但它只是顯示項目,但不是圖標。 這裏是我的代碼不能使用ListCellRenderer

// Item類

public class Item { 
    private String title; 
    private String imagePath; 
    private ImageIcon image; 
    //getter and setter} 

// ItemRenderer的

public class ItemRenderer extends JLabel implements ListCellRenderer{ 

    private static final Color HIGHLIGHT_COLOR = new Color(0, 0, 128); 

    public ItemRenderer() { 
    setOpaque(true); 
    setIconTextGap(12); 
    } 
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
{ try 
    { 
     Item item = (Item)value; 
     System.out.println("hhhhhhhhhhhhhhhhhhhhhhhhh" + item.getTitle() + ";icon=" + item.getImagePath()); 
     setText(item.getTitle()); 
     setIcon(item.getImage()); 

     if (isSelected) 
     { 
      setBackground(HIGHLIGHT_COLOR); 
      setForeground(Color.white); 
     } 
     else 
     { 
      setBackground(Color.white); 
      setForeground(Color.black); 
     } 
    } 
    catch(UnsupportedOperationException ex) 
    { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
    return this; 
} 

//這裏是我的代碼使用ListCellRenderer

public frmMain() { 
    initComponents(); 

    DefaultListModel model = new DefaultListModel(); 

    Item [] items = null; 
    items = new Item[5]; 

    for(int i=0;i<5;i++) 
    { 
     items[i] = new Item(); 
     items[i].setTitle("Item " + i); 
     items[i].setImagePath("pdf-gif.gif"); 

     model.addElement(items[i]); 
    } 

    lstLeftItems.setModel(model); 

    lstLeftItems.setCellRenderer(new ItemRenderer()); 
    lstLeftItems.setVisibleRowCount(5); 


} 

注:lstLeftItems是Jlist。

請幫我解決這個錯誤。

回答

1

根據您提供的代碼,圖標爲空。我看到你在哪裏設置標題和imagePath,但無處可見,你實際上讀取圖像文件來創建圖標。

如果您需要更多的幫助發佈您的SSCCE,所以我們可以看到真正的問題。

+0

Hooray for SSCCE! \ O / – Bombe 2009-12-04 07:44:23

0

感謝您的回答。我沒有設置圖像東陽我的getter方法進行圖像屬性 這裏是我的代碼

public ImageIcon getImage() { 

    if(image==null) 
    { 
     image = new ImageIcon(imagePath); 
    } 
    return image; 
} 

所以,只要設置ImagePath的就夠了。