JList + ListCellRenderer

Status
Nicht offen für weitere Antworten.

raffnix

Bekanntes Mitglied
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...
 
Ich würde das Wahrscheinlich so (oder ähnlich machen):
Code:
    // 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:
Code:
 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;
     }
 }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben