Hi Patrik,
Post by Patrick Stiefelich möchte gerne in einer JTable eine bestimmte Spalte mit farbigem
Hintergund versehen...
Ich stelle mir das so vor, daß ich einfach durch die Zeilen der Tabelle
iteriere und dann, wenn ich den Wert, den ich suche, gefunden habe , soll
die entsprechende Zeile einfach den Hintergrund geändert bekommen.
Also was ich schaffe: Die Zeile ermitteln, wo der Wert steht mit
getValueAt()... und equals-Vergleich
Dann habe ich die Zeile und jetzt ?
Kann mir jemand weiterhelfen ?
Diesen Wert den du jetzt hast, ist vom Model. Das Modell und die
Visualisierung der Daten des Modells sind getrennt (MVC-Pattern).
Meine Swing Kenntnisse sind etwas eingerostet, da ich seit Jahren
nur noch SWT benutze. Das was du benutzen kannst, sind
CellRenderer. Die normale Tabellenkomponente ist ein normales
Label, soweit ich mich erinnere. Auch wird jede Zeille durch ein
und das selbe Label dargestellt. (Hauptsache ich erzähl jetzt keinen
Quatsch).
Naja letztendlich läuft eine Lösung darauf hinaus, dass du den
CellRenderer erweiterst und immer, wenn ein bestimmter Wert
erreicht wird, beim Zeichnen dieser Zelle den Hintergrund setzt.
Hört sich komplizierter an, als es ist. Schnapp dir einfach dein
Swing Buch (hast keins? dann kaufen oder Bibliothek sind
unbezahlbar diese Bücher ;).
Zum setzen eines CellRenderers mußt du folgendes tun:
TableColumnModel columnModel=table.getColumnModel();
TableColumn column=columnModel.getColumn(columnIndex);
column.setCellRenderer(myRenderer);
Falls du jetzt nur einen gewissen Typ von Daten oder
Informationen ersetzen möchtest, kannst du einfach einen
CellRenderer schreiben, der einen gegebenen CellRenderer
benutzt. Oh man am besten ich zeigs dir kurz was ich meine:
Als erstes TableCellRenderer ist die Klasse die wir erweitern
müssen, wir sollten eventuell den DefaultTableCellRenderer
erweitern, da dies wohl am einfachsten wäre:
class MyTableCellRenderer extends DefaultTableCellRenderer {
TableCellRenderer defaultRenderer;
MyTableCellRenderer(defaultRenderer) {
this.defaultRenderer=defaultRenderer;
}
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
Component component=
defaultRenderer.getTableCellRenderer(table,value,
isSelected,hasFocus,row,column);
if(wert von value ist was wir markieren wollen)
component.setBackground(...);
}
}
Ich denke mal, dass die Idee nun verständlicher ist.
Schau dir die TableCellRenderer an und versuchs
einmal auf diesen Weg. Falls du Probleme hast,
meld dich einfach. Das kriegen wir schon hin ;-)
Machs gut,
Martin (Kersten)