Java JTable: Alle Zellen mit Text "xyz" einfärben

nintendoluk

Commander
Registriert
Mai 2014
Beiträge
2.124
Hi zusammen,

ich suche schon seit einiger Zeit nach einer Möglichkeit, Zellen mit bestimmten Inhalten eine bestimmte Farbe zu verpassen. Ich habe jedoch keine Lösung gefunden, die ich auf Anhieb weit genug verstanden habe um zu sagen: "Das ist das was ich brauche"

Deshalb komme ich mit dieser Frage nun zu euch.
Mein Quellcode sieht stark vereinfacht etwa so aus:

Code:
 String[][] rowData = {
    { "rot", "blau" }, { "rot", "gelb" }, { "gelb", "rot" },
    { "blau", "gelb" }, {"gelb", "gelb"} ,{ "rot", "blau" },
    { "rot", "blau" }, {"blau", "gelb" },
    { "rot", "gelb" }, {"rot", "gelb" }
    };

    String[] columnNames =  {
      "blabla", "blubblub"
    };

    JFrame f = new JFrame();
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

    JTable table = new JTable( rowData, columnNames );
    f.add( new JScrollPane( table ) );

    f.pack();
    f.setVisible( true );

Im Original wird die Tabelle Dynamisch gefüllt, jedoch auch anhand eines String 2D-Arrays, deshalb wäre es mir wichtig wenn ich die Tabelle auch Dynamisch einfärben könnte.

Pseudocode wie ich es mir vorstellen würde:

Code:
for(int iZeile = 0; iZeile < rowData.length; iZeile++)
{
	for(int iSpalte = 0; iSpalte < rowData[iZeile].length; iSpalte++)
	{
		if(rowData[iZeile][iSpalte] == "rot")
		{
			table.ändereFarbe(iZeile, iSpalte, Color.RED);  //Dieser Befehl muss ersetzt werden
		}
	}
}

Ist auch O.K. wenns n bissl komplizierter wird, wenn ihr es mir erklärt (Muss es ja an meinen Quelltext anpassen) ;-)

Danke & Gruß
Lukas
 
Unter der folgenden Seite gibt es einige Beispiele zum Thema JTable:
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer

Schau dich mal nach CellRenderer um. Du solltest einen eigenen schreiben und dann abhängig von dem Wert der Zelle kannst du dann entsprechend einfärben oder auch nicht.

Genauso würde es vielleicht Sinn machen ein richtiges TableModel zu verwenden.
 
Danke, ich werds mal versuchen ^^

EDIT:

so ich habe jetzt folgenden ColorRenderer geschrieben:
Code:
package my.java.demo.prog1;

import java.awt.*;
import javax.swing.table.*;

class ColorRenderer extends DefaultTableCellRenderer
{
  @Override
  public void setValue( Object value )
  {
    if ( value instanceof String )
    {
    	
    	if(((String)value).equals("ever"))
    	{
    		setForeground(Color.BLUE);
    	}
    	else if(((String)value).equals("space"))
    	{
    		setForeground(Color.GRAY);
    	}
    	else
    	{
    		setForeground(Color.RED);
    	}
    	

      setText( value.toString() );
    }
    else
      super.setValue( value );
  }
}

Diesen benutze ich folgendermaßen

Code:
		JTable table = new JTable(rowData, columnNames);
		f.add(new JScrollPane(table));
		
		TableCellRenderer ren = new ColorRenderer();
		table.setDefaultRenderer( String.class, ren );

Die Farben ändern sich aber nicht.

Ich nehme mal an ich muss die Methode "setValue" selbst ansprechen, das geht aber nicht obwohl die Methode "public" ist.

Die Klasse ist eine abgeänderte Version von der aus dem JavaInsel-Buch

Was übersehe ich?

Gruß
Lukas
 
Zuletzt bearbeitet:
Zurück
Oben