Verständnisproblem mit CellRenderer

ssd

Neues Mitglied
Hallo und danke für's Lesen vorweg!

Ich habe hier Quelltext, dessen Autor ein Bekannter von mir ist. Eine darin enthaltene Tabelle hat 11 Spalten. In der letzten Spalte sollen die Zellen abhängig von ihrem Wert eingefärbt werden. In der Spalte stehen Integer-Werte. Ist ein Wert größer als 0, soll die Zelle rot markiert werden. Dazu habe ich den CellRenderer der entsprechenden Spalte auf diesen gesetzt:

Java:
class ColorRendererMinimumStock extends DefaultTableCellRenderer {
               
        @Override
        public Component getTableCellRendererComponent(JTable table, 
                Object value,
                boolean isSelected, 
                boolean hasFocus,
                int row, 
                int column){
            
            setHorizontalAlignment(JLabel.RIGHT);
            setText((value == null) ? "" : value.toString());
            setFont(getFont().deriveFont(Font.PLAIN));
            
            if(isSelected){
                setOpaque(true);
                setBackground(UIManager.getColor("Table.selectionBackground"));
                setForeground(UIManager.getColor("Table.selectionForeground"));
                if(value == null) {
                    
                } else if(value instanceof Integer) {
                    Integer val = ((Integer)value).intValue();
                    if(val > 0){
                        setBackground(Color.RED);
                        setForeground(Color.WHITE);
                    }
                }
            } else {
                setOpaque(false);
                setBackground(null);
                setForeground(Color.BLACK);
                if(value == null) {
                    
                } else if(value instanceof Integer) {
                    Integer val = ((Integer)value).intValue();
                    if(val > 0){
                        setBackground(Color.RED);
                        setForeground(Color.WHITE);
                    }
                }
            }
            
            return this;
        }
        
    }

Die Bedingung im isSelected-Block greift so, wie ich mir das vorgestellt habe. Allerdings nur in den selektierten Zeilen. Im else-Teil, also betreffs aller anderen (nicht selektierten) Zeilen, greift meine Bedingung nie - obwohl im Ergebnis so ganz allgemein schon die "Farben stimmen". Nur der (Sonder-)Fall, den ich hier behandeln will (value > 0 bei nicht-selektierten), wird nicht erkannt.

Ich habe versucht nachzuvollziehen, wann getTableCellRendererComponent aufgerufen wird. Scheinbar im Zuge etlicher Ereignisse, wie dem Selektieren (daher klappt der erste Teil auch) oder bei Änderung der Mausposition etc. Ich hätte erwartet, dass die Tabelle irgendwo initial gezeichnet wird und dann alle Zellen einmal durchgegangen werden. Es scheint dem nicht so zu sein und dieser Renderer verhält sich anders, als ich dachte.

Ich habe die ein oder andere Beschreibung und ein gefühltes Dutzend Forumsthemen gelesen. Es heißt oft, der Renderer sei eben nur eine Instanz (für die ganze Spalte) und man müsse ihn sich wie einen Stempel vorstellen. Diese Tatsache scheint irgendwie mit meinem Vorhaben zu kollidieren.

Ich erwarte absolut keinen fertigen Code, ein guter Denkanstoß bzw. ein guter Link, wo ich die Antwort nachschlagen kann wäre schon klasse. Von selbst kam ich leider bisher nicht auf des Rätsels Lösung.

Danke!
 
Zuletzt bearbeitet:

ssd

Neues Mitglied
Hallo nochmal,

ich kann den Beitrag leider nicht mehr editieren.. mit dem CellRenderer komme ich nun zurecht und verstehe einigermaßen, was er wann macht. Mein Problem war allerdings gar nicht der Renderer, sondern ein Bug in Java:
swing - setOpaque(true/false); Java - Stack Overflow
Ich kann mit dem LAF von dem Bekannten den opaque-Wert meiner Komponente nicht durch setOpaque verändern. Die Lösung war dann simpel: extends JLabel implements TableCellRenderer statt extends DefaultTableCellRenderer ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Verständnisproblem bei Fehlermeldung bei "showMessage" AWT, Swing, JavaFX & SWT 3
M JavaFX Tooltip bei setOnMouseMoved Verständnisproblem AWT, Swing, JavaFX & SWT 6
B OpenGl lwjgl Verständnisproblem AWT, Swing, JavaFX & SWT 5
K Verständnisproblem mit Interface AWT, Swing, JavaFX & SWT 3
C JTextField und JTextArea - Verständnisproblem AWT, Swing, JavaFX & SWT 14
E JTable und tablemodel Verständnisproblem AWT, Swing, JavaFX & SWT 3
S Implementierung Java Swing HelloWorld - verständnisproblem AWT, Swing, JavaFX & SWT 3
D Verständnisproblem mit Layoutmanagern. AWT, Swing, JavaFX & SWT 7
A Verständnisproblem bei JTable AWT, Swing, JavaFX & SWT 6
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
M Swing Jtable CellRenderer Parameter uebergeben AWT, Swing, JavaFX & SWT 4
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
G JComboBox mit CellRenderer (Auswahl) AWT, Swing, JavaFX & SWT 11
J JTable: Problem bei CellRenderer AWT, Swing, JavaFX & SWT 3
S Swing Zelle einer JTable hervorheben (ohne CellRenderer) AWT, Swing, JavaFX & SWT 3
Spin CellRenderer Probleme bei JList AWT, Swing, JavaFX & SWT 4
S Swing Jlist - CellRenderer/ Selektion AWT, Swing, JavaFX & SWT 2
B JTable CellRenderer AWT, Swing, JavaFX & SWT 5
D Swing JList, CellRenderer und Model AWT, Swing, JavaFX & SWT 6
C Wieso funktionert der CellRenderer nicht? AWT, Swing, JavaFX & SWT 2
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
hdi Swing JTable: Mein CellRenderer ist ein Performance-Killer? AWT, Swing, JavaFX & SWT 7
E Swing JTable mit CellRenderer AWT, Swing, JavaFX & SWT 7
J Swing JXTable, vom CellRenderer gerendertes Value holen. AWT, Swing, JavaFX & SWT 5
J JList CellRenderer Null-Layoutpanel AWT, Swing, JavaFX & SWT 4
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
H JTable und CellRenderer AWT, Swing, JavaFX & SWT 2
M CellRenderer in JTable AWT, Swing, JavaFX & SWT 11
D JList Cellrenderer fügt mehrfach ein AWT, Swing, JavaFX & SWT 2
G JTable, TableModel und CellRenderer AWT, Swing, JavaFX & SWT 3
K Verständnisfrage zum CellRenderer AWT, Swing, JavaFX & SWT 4
G [Problem] CellRenderer und ActionCommand AWT, Swing, JavaFX & SWT 5
K JTable - warum funktioniert mein CellRenderer nicht? AWT, Swing, JavaFX & SWT 9
G CellRenderer, der einige ImageIcons aneinanderreiht AWT, Swing, JavaFX & SWT 5
G JTable: Zellenhöhe mit neuem CellRenderer & Editor AWT, Swing, JavaFX & SWT 17
G CellRenderer funkt net AWT, Swing, JavaFX & SWT 5
T CellRenderer funzt net AWT, Swing, JavaFX & SWT 20
F JTable CellRenderer über boolean AWT, Swing, JavaFX & SWT 12
M Krieg keine CellRenderer Methode hin :( AWT, Swing, JavaFX & SWT 12
C JTable mit JPanel als CellRenderer AWT, Swing, JavaFX & SWT 2
G JTable CellRenderer-Problem AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben