TableCellRenderer bzw. ColorRenderer

Status
Nicht offen für weitere Antworten.

diabolik

Aktives Mitglied
Hallo Leute, ich verzweifle etwas. Desshalb wende ich mich mal wieder an alle, die hier weitaus mehr Erfahrung haben als ich.

Ich möchte in einer JTable, die Schriftfarbe (Foreground) jeder x-beliebigen Zelle ändern können. Jedoch nicht, wie in so vielen Beispielen beschrieben, durch ein nach "Klick" erfolgendes Ereignis, sondern direkt aus dem Quellcode heraus.

Muster: "table1.Cell(x,y).setForeground(Color.Green)" oder so ähnlich.


Kann mir bitte irgendwer den Quellcode für genau diesen Anwendungsfall "posten"?

Vielen Dank im Voraus!
 

arthur177

Mitglied
Ich weiß nicht ob dir das direkt weiter hilft, aber schau dir einfach mal dieses Beispiel an.
Es werden alle negativen Werte, also alle mit einem "-" vor der Zahl rot geschrieben:

Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class KontoTableCellRenderer implements TableCellRenderer {

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			                                       boolean isselected, boolean hasfocus,
			                                       int row, int column)
	{
		JLabel label = new JLabel((String)value);
		label.setOpaque(true);
		
		label.setFont(new Font("Courier New",Font.BOLD,14));
		if( column == 5)
		{
			label.setHorizontalAlignment(JLabel.RIGHT);
			String str = (String)value;
			if( str.indexOf("-")>=0 )
			{
				label.setForeground(Color.RED);
			}
		}
		else
			label.setHorizontalAlignment(JLabel.LEFT);
		
		if(isselected)      // Ausgewählte Zeile markieren
			label.setBackground(Color.YELLOW);
		else
			label.setBackground(Color.WHITE);
		return label;
	}

}
 

diabolik

Aktives Mitglied
Hat mir leider nicht geholfen. Wie kann ich denn die Zelle ansprechen, ohne dafür mit der Maus draufklicken zu müssen?
 

KrokoDiehl

Top Contributor
Ich denke der geeigneteste Weg läuft über einen TableCellRenderer. Wenn du einen eigenen an jede Zelle setzt, kannst du z.B. über
Java:
MyTableCellRenderer renderer = (MyTableCellRenderer)table.getCellRenderer(row, col);
renderer.setForegroundColor( color );
die Zellenfarbe ändern, wobei die Setter-Methode eine eigene ist.
So müsstest du für jede Zelle eine eigenes Renderer-Objekt erstellen, weil sich die Farben sonst verständlicherweise für alle/mehrere Zellen auswirken.
Du könntest aber auch die Farben für die Zellen separat als
Code:
Color[][]
-Array (oder so) wo führen (im Renderer z.B.) und darüber die jeweilige Zellenfarbe setzen. Das kannst du entweder in einem TableCellRenderer oder in der überschriebenen JTable-Methode
Code:
prepareRenderer(renderer, row, column)
.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben