Hallo!
Ich habe mal eine kleine Frage zum CellRenderer einer Tabelle: Bekommt eigentlich jede Zelle ihre eigene Instanz des CellRenderers, oder gibt es nur einen CellRenderer für die ganze Tabelle?
Hintergrund: Ich habe eine Tabelle, in der Spalten angewählt werden. Diese werden dann nacheinander in unterschidlichen Farben eingefärb, um die Reihenfolge der Auwahl zu visualisieren. Mein Problem ist, dass zwar die Spalten eingefärbt werden, aber leider immer in der gleichen Farbe.
Wähle ich die erste Spalte an, so wird diese rot. Wähle ich zusätzlich noch eine zweite Spalte an, dann wechselt die Farbe zu grün, aber leider nicht nur für die zweite Spalte, sondern auch in der ersten angewählten Spalte, obwohl diese eigentlich rot sein bleiben sollte. Wähle ich die nächste Spalte an, so wechselt die Farbe wieder zu der aktuellen, aber wieder in allen angewählten Spalten.
Das ist mal der Code dazu: (Problem wohl in den Zeilen 41-52)
Gruß
Maik
Ich habe mal eine kleine Frage zum CellRenderer einer Tabelle: Bekommt eigentlich jede Zelle ihre eigene Instanz des CellRenderers, oder gibt es nur einen CellRenderer für die ganze Tabelle?
Hintergrund: Ich habe eine Tabelle, in der Spalten angewählt werden. Diese werden dann nacheinander in unterschidlichen Farben eingefärb, um die Reihenfolge der Auwahl zu visualisieren. Mein Problem ist, dass zwar die Spalten eingefärbt werden, aber leider immer in der gleichen Farbe.
Wähle ich die erste Spalte an, so wird diese rot. Wähle ich zusätzlich noch eine zweite Spalte an, dann wechselt die Farbe zu grün, aber leider nicht nur für die zweite Spalte, sondern auch in der ersten angewählten Spalte, obwohl diese eigentlich rot sein bleiben sollte. Wähle ich die nächste Spalte an, so wechselt die Farbe wieder zu der aktuellen, aber wieder in allen angewählten Spalten.
Das ist mal der Code dazu: (Problem wohl in den Zeilen 41-52)
Code:
public class MyCellRenderer extends JLabel implements TableCellRenderer
{
/**
*
*/
private static final long serialVersionUID = 1L;
private Color background = Color.WHITE;
private boolean hasColor = false;
public MyCellRenderer()
{
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
// set the default color for a cell
setForeground(Color.BLACK);
setBackground(Color.WHITE);
if(value instanceof String)
{
if(value.toString().equals(" "))
{
setText(" ");
return this;
}
// determine if the cells value is out of tolerance
double d = Double.parseDouble(value.toString());
double t = WorkingSet.getActualTolerance();
if((d > t) || (d < t*-1))
setForeground(Color.RED);
setText(value.toString());
int[] columns = table.getSelectedColumns();
if(isSelected && (column == columns[table.getSelectedColumnCount()-1]) && !isHasColor())
{
background = ChartColorController.getTableColor(table.getSelectedColumnCount());
setHasColor(true);
}
if(!isSelected && (table.getSelectedColumnCount() <= 1) && isHasColor())
{
background = Color.WHITE;
setHasColor(false);
}
setBackground(background);
}
return this;
}
private boolean isHasColor()
{
return hasColor;
}
private void setHasColor(boolean hasColor)
{
this.hasColor = hasColor;
}
}
Gruß
Maik