Um eine JList zu erstellen, die vor jedem Eintrag ein bestimmtes oder immer dasselbe Icon anzeigt muss man zunächst einen neuen CellRenderer erzeugen.
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; } }
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; } }
Um den gewünschten CellRenderer zu verwenden hilft folgender Code:
// 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));
list.setCellRenderer(new IconListRenderer());