L
LuMpeH
Gast
Hi!
Ich habe ein Problemchen. Ich beschreib mal kurz.
Ich habe eine Tabelle, diese soll farbige Rows haben können. Nun habe ich einen Cellrenderer geschrieben und diesem der Tabelle zugewiesen. Hier mein CellRenderer.
zuweisen dann so
Nun arbeitet das Programm und fügt cirka jede sekunde eine neue Row zur Tabelle hinzu. Die Row wird dann je nach gewünschter Farbe gefärbt.
Nun kommt das Problem.
Die Farben werden nach ein paar Rows aufeinmal chaotisch. Aufeinmal ist alles rot z.B. oder grün... irgendwie komisches verhalten. Ich hab das gefühl der Renderer kommt durcheinander und färbtganz falsche Rows mit falschen farben. Also irgendwas stimmt da ganz und garnicht...
Wie kann man das besser realisieren?
Also ich möchte folgende Funktionalität: Das Programm scannt etwas und fügt das Ergebnis als Row dieser Tabelle hinzu. Und das Ergebniss soll eine bestimmte Farbe haben, z.b. rot (also die Row soll rot sein). Das muss nicht die Tabelle selbst wissen, sondern das Ergebnis "weiß" dass es rot sein muss . Deshalb hab ich auch ne Methode "setColor()".
Das ganze soll auch nach eventuellen SortierAktionen erhalten bleiben (also die Färbung). Deshalb ist es glaub ich schlecht zu sagen, dass z.B. Ergebnis X ist in Row 5 und hat Farbe rot. Weil wenn man umsortiert ist z.B. Ergebnis X nicht mehr in Row 5 sondern in row 29.. Dann müsste row 29 Rot werden und Row 5 wieder weiß.
Ist blöd zu erklären.. aber ich hoffe jemand versteht mich.
Vielleicht noch zur Verdeutlichung, im TableModel rufe ich dann folgendes auf
Wie gesagt er färbt schon nur nicht richtig ...
Muss ich vielleicht explizit für JEDE Zelle einen eigenen Renderer haben?
Danke für die Hilfe!
Ich habe ein Problemchen. Ich beschreib mal kurz.
Ich habe eine Tabelle, diese soll farbige Rows haben können. Nun habe ich einen Cellrenderer geschrieben und diesem der Tabelle zugewiesen. Hier mein CellRenderer.
Code:
public class myCellRenderer extends DefaultTableCellRenderer{
private Color color = new Color(240,240,240);
private int RowToColor = -1;
public void setRowToColor(int row) {
RowToColor = row;
}
public void setColor(Color c){
color = c;
}
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table, obj, isSelected,hasFocus, row, column);
if (RowToColor != -1 && row == RowToColor) {
label.setOpaque(true);
label.setBackground(color);
}
return label;
}
}
zuweisen dann so
Code:
ScanTableCellr = new myCellRenderer();
JTableTabelle.setDefaultRenderer(Object.class, ScanTableCellr);
Nun arbeitet das Programm und fügt cirka jede sekunde eine neue Row zur Tabelle hinzu. Die Row wird dann je nach gewünschter Farbe gefärbt.
Nun kommt das Problem.
Die Farben werden nach ein paar Rows aufeinmal chaotisch. Aufeinmal ist alles rot z.B. oder grün... irgendwie komisches verhalten. Ich hab das gefühl der Renderer kommt durcheinander und färbtganz falsche Rows mit falschen farben. Also irgendwas stimmt da ganz und garnicht...
Wie kann man das besser realisieren?
Also ich möchte folgende Funktionalität: Das Programm scannt etwas und fügt das Ergebnis als Row dieser Tabelle hinzu. Und das Ergebniss soll eine bestimmte Farbe haben, z.b. rot (also die Row soll rot sein). Das muss nicht die Tabelle selbst wissen, sondern das Ergebnis "weiß" dass es rot sein muss . Deshalb hab ich auch ne Methode "setColor()".
Das ganze soll auch nach eventuellen SortierAktionen erhalten bleiben (also die Färbung). Deshalb ist es glaub ich schlecht zu sagen, dass z.B. Ergebnis X ist in Row 5 und hat Farbe rot. Weil wenn man umsortiert ist z.B. Ergebnis X nicht mehr in Row 5 sondern in row 29.. Dann müsste row 29 Rot werden und Row 5 wieder weiß.
Ist blöd zu erklären.. aber ich hoffe jemand versteht mich.
Vielleicht noch zur Verdeutlichung, im TableModel rufe ich dann folgendes auf
Code:
cR = (myCellRenderer) table.getDefaultRenderer(Object.class);
cR.setColor(Color.GREEN);
cR.setRowToColor(table.getRowCount());
super.dataVector.add(otm.getTableVector()); //das hier ist das Ergebnis
fireTableStructureChanged();
Wie gesagt er färbt schon nur nicht richtig ...
Muss ich vielleicht explizit für JEDE Zelle einen eigenen Renderer haben?
Danke für die Hilfe!