Swing Mit TableCellRenderer einzelne Zellen markieren

dbausnnd

Aktives Mitglied
Hi,

ich nutze einen eigenen TableCellRenderer den ich vom DefaultTableCellRenderer ableite. Wenn ich in der Methode getTableCellRendererComponent setForeground(Color.RED) hinterlegt wird die komplette Tabelle in Rot dargestellt. Wenn ich jedoch lediglich eine Spalte markieren möchte wird immer lediglich der Wert der Spalte in der markierten Zeile rot dargestellt. Auch wenn ich die Darstellung auf den Inhalt prüfen will. Beispielsweise wenn A enthalten ist soll der Wert rot dargestellt werden klappt das nur wenn die Zeile mit eine A markiert ist.

Hat jemand eine Idee?

Code:
@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(value.toString().equals("A")){
                                        //Geht nicht
			c.setForeground(Color.RED);
		}
		
		if(column == 2){
                                        //Geht nicht
			c.setForeground(Color.RED);
		}

                          //Klappt
                           c.setForeground(Color.RED);
		
		return this;
	}
 
Zuletzt bearbeitet:
Hi,

mein Fehler. Habe so viel rumgetestet das der Code nicht ganz korrekt war:

Beispiel 1:
Code:
@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 (value.toString().equals("A")) {
			//Geht nicht
			c.setForeground(Color.RED);
		}

		if (column == 2) {
			//Geht nicht
			c.setForeground(Color.RED);
		}

		//Klappt
		c.setForeground(Color.RED);

		return c;
	}

Das Ergebnis ist identisch mit diesem:

Code:
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		super.getTableCellRendererComponent(table, value,
				isSelected, hasFocus, row, column);

		if (value.toString().equals("A")) {
			//Geht nicht
			setForeground(Color.RED);
		}

		if (column == 2) {
			//Geht nicht
			setForeground(Color.RED);
		}

		//Klappt
		setForeground(Color.RED);

		return this;
	}
 
Ich konnte das Problem erstmal lösen.

Ich nutze keine JTable sondern eine JXTable. Dort wird der prepareRenderer aufgerufen. Die Implementierung der JXTable ändert dabei die Farbe wieder in den STandartwert. Überschreibe ich die Implementierung der JXTable mit dem der JTable bekomme ich es korrekt angezeigt....

Kennt sich jemand mit der JXTable gut aus und kann das Verhalten erklären? Sollte die Verarbeitung mit den Renderern bei einer JXTable anders erfolgen?
 

Neue Themen


Zurück
Oben