JTable Zeilen einfärben nach Bedingung

eraser666

Grünschnabel
Hallo,

ich möchte Zeilen einer JTable unterschiedlich einfärben.

Hierzu habe ich mehrere Links bereits gefunden und den Code entsprechend implementiert:
http://www.tutorials.de/swing-java2d-3d-swt-jface/195978-jtable-zelle-gezielt-einfaerben.html

Mein Code:
PHP:
import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class LeadTableRenderer extends DefaultTableCellRenderer {

    /**
     * 
     */
    private static final long serialVersionUID = -7171382203765416074L;

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        
        Component c = super.getTableCellRendererComponent(table,
                value, isSelected, hasFocus, row, column);
        
        if(column == 3) {
            if (value.equals("Kalt")) {
                setBackground(Color.GREEN);
            } else if (value.equals("Warm")) {
                setBackground(Color.YELLOW);
            } else if(value.equals("Heiß")) {
                setBackground(Color.RED);
            }
        } 

        return this;
    }
}

Nun ist es so, dass beim Setzen der Werte das Setzen der Farben verschoben ist.
Ich habe 7 Zeilen.
Zeile 1: in Spalte 3 steht ""
Zeile 2: in Spalte 3 steht "kalt"
Zeile 3: in Spalte 3 steht "kalt"
Zeile 4: in Spalte 3 steht ""
Zeile 5: in Spalte 3 steht "kalt"
Zeile 6: in Spalte 3 steht "warm"
Zeile 7: in Spalte 3 steht "kalt"

Eingefärbt werden die Zeilen mit (null bedeutet Standardhintergrund:
Zeile 1: null
Zeile 2: null
Zeile 3: grün
Zeile 4: grün
Zeile 5: grün
Zeile 6: grün
Zeile 7: gelb

Irgendwie setzt der beim Farbe setzen eine Zeile zu spät an.

Weiß jemand warum das so ist und wie ich das beheben kann?


VG
Eraser
 
Ich habe eine Lösung gefunden:
http://www.java-forum.org/awt-swing-swt/97490-farbige-zelle-ohne-defaulttablecellrenderer.html

Hier noch kurz meine Lösung:
Das Einfärben der Zeilen war deswegen um eine Zeile verschoben, weil ich mein Prüfkriterium in der letzten Spalte einer Zeile befand.
Erst ab diesem Zeitpunkt, als der Wert gesetzt wurde, erkannte der Renderer, dass er die Felder anders einfärben muss.
Somit habe ich die Spalte, die das Prüfkriterium für den Renderer enthält an den Zeilenanfang verschoben und meinen Renderer entsprechend angepasst (Details siehe Link).

Somit habe ich in meinem eigenen Renderer folgendes gemacht:
PHP:
import java.awt.Color;
import javax.swing.table.DefaultTableCellRenderer;

public class LeadTableRenderer extends DefaultTableCellRenderer {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7171382203765416074L;

	Color currentCol;
	
	@Override
	protected void setValue(Object value) {
		super.setValue(value);

		if (value.equals("Kalt")) {
			currentCol = Color.GREEN;
		} else if (value.equals("Warm")) {
			currentCol = Color.YELLOW;
		} else if (value.equals("Heiß")) {
			currentCol = Color.RED;
		} else if (value.equals("unqualifiziert")){
			currentCol = null;
		}

		setBackground(currentCol);
	}
}
 
Zurück