Hallo,
Ich habe das Gefühl, dass sich mein Problem nicht so richtig mit dem Erstellen eines eigenen Zellen-Renderers lösen lässt.
Meine Tabelle (data_model) wird durch das Lesen einer externen Datei befüllt. Jeder Zellen-Eintrag enthält ein String. Die Anzahl der Zeilen und Spalten wird zur Laufzeit geändert. Das Programm soll nun erkennen, ob Strings in den Spalten einer Zeile unterschiedlich sind. Wenn sich die Strings nicht ähneln soll die Zeile eingefärbt werden. Implementation siehe unten.
Der Aufruf im "if (found)" Block färbt allerdings nicht die Zeile rot, sondern die ganze Tabelle. Ich habe die Befürchtung, dass jede Zelle mit dem gleichen Zeiger bedient wird, so dass ich gar keine Möglichkeit habe eine einzelne Zelle zu ändern.
Des weiteren habe ich keine Idee, wie ich über CellRenderer auf die Nachbar-Elemente zugreifen kann. Ich kann ja immer nur Konditionale Abfragen innerhalb der Component durchführen.
Hat jemand eine Lösung?
Gruß
Frost.
Ich habe das Gefühl, dass sich mein Problem nicht so richtig mit dem Erstellen eines eigenen Zellen-Renderers lösen lässt.
Meine Tabelle (data_model) wird durch das Lesen einer externen Datei befüllt. Jeder Zellen-Eintrag enthält ein String. Die Anzahl der Zeilen und Spalten wird zur Laufzeit geändert. Das Programm soll nun erkennen, ob Strings in den Spalten einer Zeile unterschiedlich sind. Wenn sich die Strings nicht ähneln soll die Zeile eingefärbt werden. Implementation siehe unten.
Java:
//loop through each row and check if values are different
if (data_table.getModel().getColumnCount() > 1){
for (int i=0;i<data_table.getModel().getRowCount();++i){
String s1 = data_table.getModel().getValueAt(i, 0).toString();
boolean found = false;
for (int j=1;j<data_table.getModel().getColumnCount();++j){
String s2 = data_table.getModel().getValueAt(i, j).toString();
if (!s1.equals(s2)){
found = true;
}
}
if (found){
data_table.getCellRenderer(i, 0).getTableCellRendererComponent(data_table, null, false, false, i, 0).setBackground(Color.red);
}
}
}
Der Aufruf im "if (found)" Block färbt allerdings nicht die Zeile rot, sondern die ganze Tabelle. Ich habe die Befürchtung, dass jede Zelle mit dem gleichen Zeiger bedient wird, so dass ich gar keine Möglichkeit habe eine einzelne Zelle zu ändern.
Des weiteren habe ich keine Idee, wie ich über CellRenderer auf die Nachbar-Elemente zugreifen kann. Ich kann ja immer nur Konditionale Abfragen innerhalb der Component durchführen.
Hat jemand eine Lösung?
Gruß
Frost.