JList ListCellRenderer wird überschrieben

Status
Nicht offen für weitere Antworten.

Tom299

Bekanntes Mitglied
hallo,

ich hab ein problem, bei dem ich im moment nicht mehr so recht weiter weiß.

hab ein JPanel, welches JList componenten darstellt. für die JLists hab ich einen eigenen
renderer geschrieben (class ActivityCellRenderer extends DefaultListCellRenderer), welcher
auch gesetzt wird.

Code:
class ActivityCellRenderer extends DefaultListCellRenderer {
    /* This is the only method defined by ListCellRenderer.  We just
     * reconfigure the Jlabel each time we're called.
     */
    
    private IResourceBundle resourceBundle = 
        CalendarModuleResourceBundleHolder.getResourceBundleForClass (ActivityListPanel.class);
    
    public Component getListCellRendererComponent(
            JList list,
            Object value,   // value to display
            int index,      // cell index
            boolean iss,    // is the cell selected
            boolean chf)    // the list and the cell have the focus
    {
        /* The DefaultListCellRenderer class will take care of
         * the JLabels text property, it's foreground and background
         * colors, and so on.
         */
        super.getListCellRendererComponent(list, value, index, iss, chf);

        // set foreground, background and text
        Activity act = (Activity) value;
        if (act != null) {
            SimpleDateFormat sdf = new SimpleDateFormat (resourceBundle.getLabel ("ACTIVITYLIST.DATEFORMAT"));
            ImmutableDateRange idr = act.getBaseDateRange ();
            String strDate = sdf.format (idr.getStartTime ());
            Calendar calToday = Calendar.getInstance ();
            calToday.setTime (GUIHandler.getCalendarModuleController ().getCurrentDate ());
            calToday.set (Calendar.HOUR_OF_DAY, 0);
            calToday.set (Calendar.MINUTE, 0);
            calToday.set (Calendar.SECOND, 0);
            calToday.set (Calendar.MILLISECOND, 0);
            Calendar calActivity = Calendar.getInstance ();
            calActivity.setTime (idr.getStartTime ());
            calActivity.set (Calendar.HOUR_OF_DAY, 0);
            calActivity.set (Calendar.MINUTE, 0);
            calActivity.set (Calendar.SECOND, 0);
            calActivity.set (Calendar.MILLISECOND, 0);
            
            if (calActivity.getTimeInMillis () < calToday.getTimeInMillis ()) {
                setForeground (Color.RED);                
                setBackground (Color.ORANGE);
                setOpaque (true);
            }
            else {
                setForeground (list.getForeground ());
                setBackground (list.getBackground ());
                setOpaque (true);
            }            
            setText (strDate + ": " + act.getDescription ());
        }

    return this;

    }
}

soweit so gut, eigentlich ... das problem ist nun, daß mein panel in einem framework eingebettet
ist und das framework bestimmte standards einstellt, wie z.b. schriftart, größe, hintergrund und
vordergrund von z.b. JList.
und genau das ist mein problem: ich setz den vordergrund z.b. ROT, doch scheinbar wird durch
das framework die vordergrundfarbe wieder überschrieben. nehm ich meine komponente aus
dem framework raus und lasse sie separat in einer testumgebung laufen, bekomm ich auch
meine rote farbe.

gibts irgend eine möglichkeit, zu verhindern, daß mein renderer überschrieben wird? hab schon
versucht den renderer oder die JList final zu deklarieren, aber das nutzt nichts.

die einzige idee, die ich noch hätte, wäre JList selbst erst mal abzuleiten und dann mit der eigenen
Liste zu arbeiten und da evtl cell renderer final zu machen oder sowas in der art, aber keine ahnung
ob das überhaupt geht und nicht daß die List dann auch wieder vom framework überschrieben wird?

für tips wäre ich sehr dankbar ...


gruß tom
 

Marco13

Top Contributor
Hm. Soo klar ist die Frage jetzt nicht. Kann es sein, dass das ominöse "Framework" von dem du redest sich den ListCellRenderer holt und durch einen eigenen ersetzt?
 

Tom299

Bekanntes Mitglied
nee, das farmework nimmt sich den gesetzten renderer, hab das schon mal debuggt, da ich auch dachte der renderer wird durch einen anderen ersetzt, dem ist aber nicht so. deswegen versteh ich den effekt ja auch net so wirklich.
setText funktioniert auch nur bedingt, d.h. mein string wird angezeigt, wenn ich font ändere (bold, italic, etc.) hat es auch keine auswirkung auf meine liste :-(
 

Marco13

Top Contributor
Ohne ein Beispiel (d.h. ohne das Framework :roll: ) ist das jetzt schwierig. Aber mal ganz dumm-dreist Debug-Ausgaben reinschreiben
Code:
 if (calActivity.getTimeInMillis () < calToday.getTimeInMillis ()) { 
    System.out.prinltn("Setze ROT in "+this);
...

}


System.out.prinltn("Gebe "+this+" zurück, Farbe ist "+this.getBackground());
return this;
... was kommt dann da?
 

Tom299

Bekanntes Mitglied
vorher:
background ist: javax.swing.plaf.ColorUIResource[r=255,g=255,b=255]
foreground ist: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]

nachher:
background ist: java.awt.Color[r=255,g=200,b=0]
foreground ist: java.awt.Color[r=255,g=0,b=0]

this:
background ist: java.awt.Color[r=255,g=200,b=0]
foreground ist: java.awt.Color[r=255,g=0,b=0]

Code:
            if (calActivity.getTimeInMillis () < calToday.getTimeInMillis ()) {
                System.out.println ("vorher:");
                System.out.println ("background ist: " + getBackground ());
                System.out.println ("foreground ist: " + getForeground ());

                setForeground (Color.RED);                
                setBackground (Color.ORANGE);
                setOpaque (true);
                
                System.out.println ("nachher:");
                System.out.println ("background ist: " + getBackground ());
                System.out.println ("foreground ist: " + getForeground ());
            }
            else {
                setForeground (list.getForeground ());
                setBackground (list.getBackground ());
                setOpaque (true);
            }            
            setText (strDate + ": " + act.getDescription ());
        }

        System.out.println ("this:");
        System.out.println ("background ist: " + getBackground ());
        System.out.println ("foreground ist: " + getForeground ());
        
    return this;

also die rückgabe ist ok ... dann müßte es wohl nachträglich irgendwo nochmal geändert werden, so wie das aussieht.
 

Tom299

Bekanntes Mitglied
so, ich hab die stelle im framework gefunden wo es passiert. der renderer wird genommen und dann wird foreground, background und font überschrieben ... und alles NACH meinen renderereinstellungen. jetzt ist die frage, wie ich das verhindern kann, falls überhaupt?
 

Marco13

Top Contributor
Was heißt "der renderer wird genommen"? Der Renderer liefert ein JLabel (sich selbst) zurück, und wenn dieses JLabel nachher nochmal verändert wird, dann kann das IMHO, AFAIK, "eigentlich" nur von einem anderen Renderer gemacht werden.

Eigentlich sollte das Framework sowas nicht machen. Und wenn es das doch macht,... tja. Man könnte jetzt brutal rum-Murksen...
Code:
class Renderer extends JLabel implements ListCellRenderer
{
    public void setBackground(Color color)
    {
        System.out.println("Nö, mach ich nicht. Ätsch.");
    }

    public void reallySetBackground(Color color)
    {
        System.out.println("Na gut...");
        super.setBackground(color);
    }

    Component getRenderComponentDingens(...)
    {
        ...
        reallySetBackground(Color.RED);
        return this;
    }
}
aber ... das kann 1000000 unagenehme Nebenwirkungen haben, und sollte nicht nötig sein....
 

Tom299

Bekanntes Mitglied
auf die idee

Code:
public void setForeground(Color fg) {

}

zu überschreiben bin ich auch gekommen. "scheint" auch zu funktionieren. allerdings hab ich dann bemerkt (hab test-ausgabe eingebaut) daß die funktion dann unendlich oft aufgerufen wird. scheinbar wird jedes mal, wenn ich setForeground aufrufe danach vom framework auch wieder setForeground aufgerufen ... :-(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
H Swing ListCellRenderer einer JList zeichnet sporadisch falsch AWT, Swing, JavaFX & SWT 6
H JFormatterTextField und JButton in JList (ListCellRenderer) AWT, Swing, JavaFX & SWT 2
N JList (JXList) ListCellRenderer zur Laufzeit ändern (Anzeigefehler) AWT, Swing, JavaFX & SWT 6
A JTabbedPane JList Listcellrenderer AWT, Swing, JavaFX & SWT 5
R JList + ListCellRenderer AWT, Swing, JavaFX & SWT 1
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben