DefaultTableRenderer für JTable

Sebastian29

Erfahrenes Mitglied
Hi an alle!

In einer Spalte der Tabelle stehen nur Zahlen drin und mit denen möchte ich gerne mit der Farbe darstellen. Die Farbdarstellung soll so laufen: Grün, weiss, grün, weiss, ....

Mit der folgenden Bedingung ist es mir klar:

Code:
   if( row % 2 == 0 )
      Grün färben
   else
      weiss färben

Aber bei dieser Bedingung ist das Problem, dass ich nicht weiss, wie ich bei dem u.g. Beispiel mit Farbe darstellen kann.

In der Spalte (Sortiert) sieht es so aus:

---| Spalte |---
-------------------
---| 1 |--
---| 1 |--
---| 1 |--
---| 2 |--
---| 2 |--
---| 3 |--
---| 4 |--
---| 4 |--
---| 4 |--
---| 5 |--

Alles, wo 1 steht, grün darstellen, dann alles, wo 2 steht, weiss darstellen, dann wieder grün, dann wieder weiss, usw.

Die Farbdarstellung benutze ich nur, wenn die Spalte sortiert. Das klappt auch soweit gut. Das Problem ist nur bei der Farbdarstellung im Renderer.

Habt ihr eine Idee, wie ich das im Renderer sauber implementieren kann oder gibt es noch eine andere Möglichkeit ohne Renderer? Bitte denk dran, dass der Renderer auch beim Hin und her Scrollen die Farbdarstellung schief gehen kann.

Gruß
Sebastian
 
Ich denke du musst für jede Zeile, die werte in der Zeile vorher prüfen.

Unfähr so (aus dem Kopf, daher nicht alle Methoden):

Code:
boolean white = true;

if(row>0){
	for(int i=1;i<row;i++){
		//Jetzt das Tablemodel nach den Werten der jeweiligen Zeile und festen Spalte fragen
		if("Wert von Zeile i != Wert von Zeile (i-1)){
			white!=white;
		}
	}
}

if(white){
	"weiss malen"
}else{
	"andere Farbe malen"
}

Das habe ich jetzt aus dem Kopf geschrieben und nicht getestet ob das geht. ;)

Gruß
Flo
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.Color;
import java.awt.Component;

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

/**
 * @author Tom
 * 
 */
public class ColoredJTableExample extends JFrame {

    public ColoredJTableExample() {
        super("ColoredJTableExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JTable table = new JTable(new Object[][] { { 1, "AA" }, { 2, "BB" },
                { 3, "CC" }, { 4, "DD" }, { 5, "EE" }, { 6, "FF" } },
                new Object[] { "A", "B" });
        table.getColumnModel().getColumn(0).setCellRenderer(
                new DefaultTableCellRenderer() {
                    @Override
                    public Component getTableCellRendererComponent(
                            JTable table, Object value, boolean isSelected,
                            boolean hasFocus, int row, int column) {

                        Component component = super
                                .getTableCellRendererComponent(table, value,
                                        isSelected, hasFocus, row, column);

                        if (row % 2 == 0) {
                            component.setBackground(Color.WHITE);
                        } else {
                            component.setBackground(Color.GREEN);
                        }

                        return component;
                    }
                });

        add(new JScrollPane(table));

        pack();
        setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new ColoredJTableExample();
    }

}

Gruß Tom
 
Zurück