Swing TableCellRenderer ändert die Zeilenfarbe zu spät

ambois

Mitglied
Hallo

Ich habe eine JTable mit 7 Spalten und möchte (abhängig vom Wert in der letzten Spalte) diejenigen Zeilen unterschiedlich färben die eine bestimmte Bedingung erfüllen.

Dazu habe ich mir eine Klasse gebastelt:
Java:
public class MyTableCellRenderer extends JLabel implements TableCellRenderer{
    private Color colorNormal =Color.gray;
    private Color colorHigh =Color.red;
    private Color colorMiddle =Color.orange;
    private Color colorLow =Color.black;
    private int columnValue;
 
	 public Component getTableCellRendererComponent(JTable table, Object value,
             boolean isSelected, boolean hasFocus,
             int row, int column) {
             column = table.convertColumnIndexToModel(column); 
             if (column == 6) {
			 columnValue = Integer.parseInt((String)value);
			 if (columnValue == 3) {
				 this.setForeground(colorHigh);
			 } 
			 else if (columnValue == 2) {
				 this.setForeground(colorMiddle);
			  } 
			 else if (columnValue == 1) {
				 this.setForeground(colorLow);
			 }
			 else {
				 this.setForeground(colorNormal);
			 }
	      }
              this.setText(value.toString());
	      return this;
	}
}

Aufgerufen wird die Methode in meiner GUI-Klasse des JTable:
Java:
table.setDefaultRenderer(Object.class, new MyTableCellRenderer());
Das ganze klappt fast.
Die einzelnen Zeilen werden unterschiedlich gefärbt abhängig des letzten Spaltenwerts ABER nicht die relevante Zeile(also die Zeile in der der Spaltenwert vorkommt) sondern immer erst die nachfolgende!

Woran könnte das liegen?
 

Michael...

Top Contributor
Woran könnte das liegen?
Weil der Renderer, wenn er irgendwann mal Spalte 6 rendern soll, die Schriftfarbe ändert und solange beibehält, bis er wieder mal Spalte 6 rendert.
Im Idealfall durchläuft der Renderer die Zellen von links nach rechts. Sobald er in Spalte 6 ankommt passt er die Schriftfarbe an, daher haben die ersten Zellen der nächsten Zeile die selbe Farbe wie die Zelle 6 eine Zeile davor.
Grundsätzlich hat man keinen Einfluss in welcher Reihenfolge und ob überhaupt die Zellen gezeichnet werden.

==> Du muss für jede Zelle den Wert aus Spalte 6 auslesen, interpretieren und dementsprechend die Farbe setzen.
Das geht im CellRenderer, ich selbst überschreibe dazu oft die prepareRenderer() der JTable.
 

ambois

Mitglied
Vielen Dank Michael...
Deine Erklärung war super so daß ich schon eine Lösung für mein Problem habe.

In meinem TableCellRenderer greife ich jetzt nicht mehr auf das Object value Objekt und prüfe es, sondern ich hole mir mit
Java:
Object contentCell = table.getValueAt(row,column)
bei jeder Zelle schon den Wert aus der letzten Spalte und pürfe somit schon in der ersten Zelle den Wert der 7.Zelle.

Grundsätzlich hat man keinen Einfluss in welcher Reihenfolge und ob überhaupt die Zellen gezeichnet werden.
Ich werde jetzt einfach mal testen wie lange das so gut geht und ob die Reihenfolge sich ändert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B TableCellRenderer rendert Integer/Boolean Felder nicht AWT, Swing, JavaFX & SWT 4
M Swing TableCellRenderer elegant anpassen AWT, Swing, JavaFX & SWT 3
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
C Swing TableCellRenderer: setText() vs. setIcon() AWT, Swing, JavaFX & SWT 5
E Swing TableCellRenderer für alle Splaten setzen?! AWT, Swing, JavaFX & SWT 3
M gleicher TableCellRenderer für mehrere unterschiedliche Tabellen AWT, Swing, JavaFX & SWT 5
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
J NullPointerException bei Benutzung vom TableCellRenderer AWT, Swing, JavaFX & SWT 3
U TableCellRenderer: Problem mit Timestamp/Date AWT, Swing, JavaFX & SWT 2
U TableCellRenderer UND prepareRenderer AWT, Swing, JavaFX & SWT 12
C Swing TableCellRenderer AWT, Swing, JavaFX & SWT 10
U TableCellRenderer und setBackground AWT, Swing, JavaFX & SWT 20
H Swing TableCellRenderer für verschiedene Spalten AWT, Swing, JavaFX & SWT 11
C Swing Problem mit TableCellRenderer in Verbindung mit TableRowSorter AWT, Swing, JavaFX & SWT 2
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 3
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
S TableCellRenderer: JLabel-Background in JPanel AWT, Swing, JavaFX & SWT 7
R JTable mit TableCellRenderer AWT, Swing, JavaFX & SWT 10
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 2
D TableCellRenderer rendert einfach nicht! AWT, Swing, JavaFX & SWT 4
S TableCellRenderer setForeground AWT, Swing, JavaFX & SWT 5
I Problem mit TableCellRenderer AWT, Swing, JavaFX & SWT 3
K TableCellRenderer Problem AWT, Swing, JavaFX & SWT 3
F TableCellRenderer wie umsetzen? AWT, Swing, JavaFX & SWT 2
D JTable TableCellRenderer AWT, Swing, JavaFX & SWT 2
J JTable und TableCellRenderer AWT, Swing, JavaFX & SWT 2
G TableCellRenderer Background variiert darstellen AWT, Swing, JavaFX & SWT 3
P TableCellRenderer mit einem TableRowSorter AWT, Swing, JavaFX & SWT 4
D TableCellRenderer PRoblem AWT, Swing, JavaFX & SWT 3
G TableCellRenderer soll ganze ausgewählte Zeile markieren AWT, Swing, JavaFX & SWT 2
S TableCellRenderer deaktivieren AWT, Swing, JavaFX & SWT 13
J TableCellRenderer AWT, Swing, JavaFX & SWT 5
S JTree mal anders (TableCellRenderer) AWT, Swing, JavaFX & SWT 6
S TableCellRenderer, Performance AWT, Swing, JavaFX & SWT 9
M Objekt in TableCellRenderer packen, warum ein Fehler? AWT, Swing, JavaFX & SWT 2
T TableCellRenderer Problem AWT, Swing, JavaFX & SWT 6
B TableCellRenderer + JComboBoxen AWT, Swing, JavaFX & SWT 2
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
K JavaFX Fenstergröße ändert sich (Gluon - SceneBuilder) AWT, Swing, JavaFX & SWT 23
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
S Look und Feel ändert sich nicht AWT, Swing, JavaFX & SWT 4
R Ellipse2D ändert Größe AWT, Swing, JavaFX & SWT 3
F JFrame nach Buttonklick 3 Sekunden warten, bevor es sich ändert AWT, Swing, JavaFX & SWT 2
V Labeltext ändert sich nicht in actionPerformed AWT, Swing, JavaFX & SWT 5
R LookAndFeel Nimbus ändert Programmausführung AWT, Swing, JavaFX & SWT 8
M Swing JScrollPane ändert ungewollt seine Größe AWT, Swing, JavaFX & SWT 2
K LookAndFeel Look And Feel ändert sich nicht AWT, Swing, JavaFX & SWT 8
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
jemandzehage setResizable(false) ändert Größe des Contentpane AWT, Swing, JavaFX & SWT 4
E Swing JLabel ändert seine Position nach setText AWT, Swing, JavaFX & SWT 2
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
B LayoutManager JLabel ändert GridBayLayout-Gewichtung AWT, Swing, JavaFX & SWT 2
M JTextArea ändert Schreibrichtung AWT, Swing, JavaFX & SWT 5
S JSplitPane ändert Farbe nicht AWT, Swing, JavaFX & SWT 4
O Hgr- Farbe einer JTable ändert sich nicht AWT, Swing, JavaFX & SWT 11
G labeltext ändert sich nicht AWT, Swing, JavaFX & SWT 28
S JList inhalt ändert sich wie nennt sich ereignis/methode? AWT, Swing, JavaFX & SWT 3
S 1 Klick für JButton und Layout ändert sich AWT, Swing, JavaFX & SWT 14
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
K JTextArea ändert Größe. AWT, Swing, JavaFX & SWT 3
S GUI ändert Größe AWT, Swing, JavaFX & SWT 9
R JTextField im GridBag ändert seine Größe nicht AWT, Swing, JavaFX & SWT 11
B JLabel ändert seine Position AWT, Swing, JavaFX & SWT 7
D CheckBox ändert Status nur, wenn sie FocusOwner ist AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben