2016-11-13 64 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:显然你不能把图标的地图传递给渲染器,这只是一个例子。