# JList + ListCellRenderer



## raffnix (31. Mai 2005)

Hallo.
Ich habe eine JList in der Pfade zu bildern angezeigt werden. nun möchte ich einzelne einträge in der JList irgendwie markieren wenn in einem bestimmten Ordner eine Datei mit selbem Namen wie das Bild  existiert .

In der Forensuche bin ich daruf gestossen, das ich wohl den ListCellRenderer  überschreiben muss.

Irgendwie fehlt mir da die idee. 
Muss ich in dem ListCellRenderer schon überprüfen ob die Datei vorhanden ist??
was muss ich in den ListCellRenderer Eintragen um die Farbe zu änderen???

Hmm Fragen über Fragen...


----------



## Sky (31. Mai 2005)

Ich würde das Wahrscheinlich so (oder ähnlich machen):

```
// Liste mit Dummy-Daten
    JList list = new JList(new String[]{"path_1", "path_2", "path_3", "path_4", "path_5", "path_6"});

    // Vector mit Pseudo-Vergleichs-Daten
    Vector<String> paths = new Vector<String>();
    paths.addElement( "path_2" );
    paths.addElement( "path_5" );
    
    // Render setzen
    list.setCellRenderer(new ColorListRender(paths));
```

Und der Renderer sieht dann so aus:

```
class ColorListRender extends JLabel implements ListCellRenderer {

     private Vector paths;
 
     public ColorListRender(Vector paths) {
         this.paths = paths;
         setOpaque(true);
     }
     
     private boolean shouldMark( String s ) {
        return paths.contains(s);
     }
     
     public Component getListCellRendererComponent(
         JList list,
         Object value,
         int index,
         boolean isSelected,
         boolean cellHasFocus)
     {
         // Dem Label den Text zuweisen
         setText(value.toString());
         // Background-Selektiert = rot ansonsten weiss
         setBackground(isSelected ? Color.red : Color.white);
         if ( shouldMark(value.toString( ))) {
             // Schriftart der zu markierende Sätze ist blau...
             setForeground( Color.blue );
         } else {
             // ... ansonsten schwarz
             setForeground(Color.black);
         }
         return this;
     }
 }
```


----------

