JTable Farben der Zeilen ändern

Kalmuecke

Grünschnabel
Hi,

kann mir jemand weiterhelfen, wie ich in einer JTable die Hintergrund-Farbe einer kompletten Zeile verändern kann?
Ich möchte gerne die Farbe bestimmter Zeilen meiner JTable abändern, je nachdem, ob gewisse Bedingungen erfüllt sind.
Das Beispiel im Anhang zeigt wie ich es meine!

Bin für ein "kleines" Tutorial oder einen Codeschnipsel dankbar.

Gruss und danke
Muecke

Ps.: Frohe Ostern! :)
 

Anhänge

  • jtablefarben.jpg
    jtablefarben.jpg
    35,7 KB · Aufrufe: 9
Ich lass das einfach mal hier:
Java:
import java.awt.Color;
import java.awt.Component;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;

public class TabelleFürKalmuecke implements TableCellRenderer {

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		{
			Border border = BorderFactory.createEmptyBorder(1, 1, 1, 1);
			JLabel jl_farbe = new JLabel((String) value);
			       jl_farbe.setOpaque(true);
			       jl_farbe.setBorder(border);
			       jl_farbe.setFont(table.getFont());
			       jl_farbe.setForeground(table.getForeground());
			       jl_farbe.setBackground(table.getBackground());
			       jl_farbe.setHorizontalAlignment(SwingConstants.RIGHT);
			       column = table.convertColumnIndexToModel(column);

// jt ist deine Tabelle!
			if (jt.getColumnCount() == 0) {
				 System.out.println("ColumnCount ist 0 ");

			} else {
				if (row == 1) {
					jl_farbe.setForeground(deine Frabe!); //Greif auf den Inhalt zu und setze die Farbe wie du willst
					
				}
				
				if (row == 2) {
					//...
				}
				
			}
			return jl_farbe;
		}
	}	
}

So wird es eingebunden
Java:
jt.setDefaultRenderer(Object.class, new TabelleFürKalmuecke());
 
Zuletzt bearbeitet:
Super genial! Das ist ein schönes überschaubares Beispiel!
Werde mich gleich mal dran machen und es für mich optimieren und einbinden!

Vielen Dank! Super Forum! :)
 
Habe deinen Teil mal bei mir eingebaut, allerdings finden ich den Fehler nicht, weshalb bei mir nur 5 Spalten von 11 rot makiert werden!!

Hier einmal mein Code:
KlasseMain => Erstellen der Tabelle
/* Panel für die Übersichts-Tabelle */
JTable tableOverview = new JTable(new EBayOrgaMainDTableModel());
JTableHeader header = tableOverview.getTableHeader();
header.setBackground(Color.GRAY);
header.setForeground(Color.white);
tableOverview.getModel().addTableModelListener(this);
tableOverview.setDefaultRenderer(Object.class, new RowColorRenderer());

Klasse AbstractTable Model:
public class EBayOrgaMainDTableModel extends AbstractTableModel
{
private boolean DEBUG = false;
private String[] columnNames = { "Nr.", "eBayName", "Name", "Vorname", "Ort", "Email",
"Betrag", "Porto", "Bezahlt", "Verschickt", "Bewertet" };

private Object[][] data =
{
{ new Integer(0), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(1), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(2), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(3), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(4), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(5), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(6), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
{ new Integer(7), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
};

public int getColumnCount()
{
return columnNames.length;
}

public int getRowCount()
{
return data.length;
}

public String getColumnName(int col)
{
System.out.println(columnNames[col]);
return columnNames[col];
}
public Object getValueAt(int row, int col)
{
return data[row][col];
}

/* Checkboxen in Spalten setzen! Funktionsweise leider noch -> Es geht einfach... */
public Class getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
}

Deine Klasse Table-Renderer:
class RowColorRenderer implements TableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Border border = BorderFactory.createEmptyBorder(1, 1, 1, 1);
JLabel jl_farbe = new JLabel((String) value);
jl_farbe.setOpaque(true);
jl_farbe.setBorder(border);
jl_farbe.setFont(table.getFont());
jl_farbe.setForeground(table.getForeground());
jl_farbe.setBackground(table.getBackground());
jl_farbe.setHorizontalAlignment(SwingConstants.RIGHT);
column = table.convertColumnIndexToModel(column);
// jt ist deine Tabelle!
if (table.getColumnCount() == 0)
{
System.out.println("ColumnCount ist 0 ");
}
else
{
if (row == 1)
{
jl_farbe.setBackground(Color.RED); //Greif auf den Inhalt zu und setze die Farbe wie du willst
}
if (row == 2)
{
//...
}
}
return jl_farbe;
}
}

Und folgendes passiert, anstatt, daß die komplette Zeile rot makiert wird!
 

Anhänge

  • jtablefarbenfehler.jpg
    jtablefarbenfehler.jpg
    42,9 KB · Aufrufe: 9
Zurück