Sascha's Wiki

JList mit Icons erstellen

Um eine JList zu erstellen, die vor jedem Eintrag ein bestimmtes oder immer dasselbe Icon anzeigt muss man zunächst einen neuen CellRenderer erzeugen.

Beispiel für dasselbe Icon

import java.awt.Component;
import java.util.Map;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;

public class IconListRenderer extends DefaultListCellRenderer{
    
    public IconListRenderer() {
    }

    @Override
    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 = new ImageIcon(getClass().getResource("/Pfad/zum/Iconfile/ico.png"));
        
        label.setIcon(icon);
        return label;
    }
}

Beispiel für unterschiedliche Icons

import java.awt.Component;
import java.awt.Graphics;
import java.util.Map;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.plaf.metal.MetalIconFactory;

public class IconListRenderer extends DefaultListCellRenderer{
    
    private Map <Object, Icon> icons = null;

    public IconListRenderer(Map<Object, Icon> icons) {
        this.icons = icons;
    }
    

    @Override
    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 = icons.get(value);
                
        label.setIcon(icon);
        return label;
    }
}

Verwendung

Um den gewünschten CellRenderer zu verwenden hilft folgender Code:

Beispiel für normalen CellRenderer

// Map erzeugen und Icons mit bestimmten Stichwörtern verknüpfen
Map<Object, Icon> icons = new HashMap<Object, Icon>();
icons.put("details", MetalIconFactory.getFileChooserDetailViewIcon());
icons.put("folder", MetalIconFactory.getTreeFolderIcon());
icons.put("computer", MetalIconFactory.getTreeComputerIcon());

// Liste mit Testwerten erzeugen
JList list = new JList( new Object[] { 
    "details", "computer", "folder", "computer"
    });			
list.setCellRenderer(new IconListRenderer(icons));

Beispiel für CellRenderer mit mehrfachen Icons

list.setCellRenderer(new IconListRenderer());

java/allgemein/jlist-icons.txt · Zuletzt geändert: 2016/04/21 09:15 (Externe Bearbeitung)