2016-11-13 62 views
0

如果我有一個JList有3個項目(橙色,蘋果,香蕉),我想用JLabel顯示每個項目的圖像,我該怎麼做?指定一個ImageIcon到JList

private void jList2ValueChanged(javax.swing.event.ListSelectionEvent evt) {          
    // TODO adds your handling code here: 
    try { 
     if (evt.getSource() == "orange") { 
      ImageIcon icon = new ImageIcon("pic/rea.png" + jList2.getSelectedValue()); 
      jLabel2.setIcon(icon); 
     } 
    } catch (Exception e) { 
     //do nothing 
    } 
} 
+0

我正在做這個作爲一個更大的項目的一部分..我有500多個代碼,但唯一一點我堅持是分配一個列表的值,以圖片在哪裏我搜索了幾天試圖解決它,而不是發佈實際的代碼,我使這一個服務於相同的目的而不使帖子太長! – jill

+0

那麼你有什麼嘗試?你有錯誤嗎?結果不符合你的預期?你有沒有嘗試[調試](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)?坦率地說,這看起來像是「爲我寫代碼」的問題,Stack Overflow不是免費的程序員服務。 –

+0

調試將無法正常工作我試過..我知道什麼是錯誤的代碼我使用了相同的變量兩次在actionlistener導致它沒有顯示任何值。 – jill

回答

0

您需要設置List的CellRenderer。示例:

private void initGUI() { 
    Image orange = getOrangeImage(); 
    Image apple = getAppleImage(); 
    // ... 

    Map<String, Icon> icons = new HashMap<>(); 
    icons.put("orange", new ImageIcon(orange)); 
    icons.put("apple", new ImageIcon(apple)); 
    // ... 

    JList<String> list = new JList<>(new String[] { "orange", "apple", "banana" }); 
    list.setCellRenderer(new FruitRenderer(icons)); 
    // ... 
} 

class FruitRenderer extends DefaultListCellRenderer { 

    private final Map<String, Icon> icons; 

    FruitRenderer(Map<String, Icon> icons) { 
     this.icons = Objects.requireNonNull(icons); 
    } 

    @Override 
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, 
      boolean isSelected, boolean cellHasFocus) { 

     Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
     if (value instanceof String) { 
      Icon icon = icons.get(value); 
      ((JLabel) comp).setIcon(icon); 
     } 
     return comp; 
    } 
} 

注意:DefaultCellListener擴展JLabel並用於呈現每個列表單元格。注意2:顯然你不能把圖標的地圖傳遞給渲染器,這只是一個例子。