JTable: Farbe der Zelle erst nach dem Neueintrag ändern

Wolfi123

Grünschnabel
Hallo Leute, ich bin auf Ihre Hilfe angewiesen.

Ich habe eine Tabelle mit Hilfe von TableModel erstellt, so weit so gut.
Jetzt müssen bestimmte Zellen in der Tabelle editierbar sein.
Der Anwender kann also den Inhalt einer Zelle verändern...
Das habe ich soweit wunderbar hinbekomen...

Jetzt kommt mein Problem. Nachdem der Anwender den Inhalt einer Zelle verändert hat, muss diese Veränderung für den Anwender sichtbar werden, sprich anders farblich dargestellt werden.

Ich habe schon alles mögliche ausprobiert, aber ich komme einfach nicht zur einer Lösung.

Kannn mir einer vielleicht sagen, wie ich es implementiern soll?

Ich bin für jeden Tip dankbar...

Vielen Dank

Alexander
 
Moin!
Du musst dir halt für jede Zelle merken, ob sie denn verändert wurde, bzw. nur die Zellen merken, die verändert wurden..
Dann solltest du einen eigenen TableRenderer implementieren, der, falls die Zelle verändert wurde, die Farbe anders setzt.

z.B:
Code:
public class CustomRenderer extends DefaultTableCellRenderer{
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
             JLabel  render = (JLabel) super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column) ;
             if(thisCellWasChanged){
                     render.setBackground(Color.RED);
                     render.setOpaque(true);
             }
             return render;
    }

}

*grüssle*
MeinerEiner
 
Danke für die schnelle Antwort...

Das heißt ich muss für jede Zelle eine boolean Variable anlegen, die regestriert, ob der Inhalt der Zelle sich verändert hat.

Kann man es nicht einfacher machen?

Oder anders gefragt wie kann ich am einfachsten festellen, dass der Wert einer Zelle verändert wurde, ohne jetzt für jede Zelle eine Variable anlegen zu müssen...

Nach einer Änderung wird doch die Methode setValueAt() von TableModel aufgerufen und erst dann der Renderer...
Wie kann ich es ausnutzen, ich meine so einer Art Flag setzen, dass auch für Renderer sichbar wird...

Danke

Alex
 
Zuletzt bearbeitet:
Moin!
Wie ich schon sagte, du musst dir merken, ob eine Zelle verändert wurde, bzw. die Zellen merken, die verändert wurden. Aber eine der Information muss gespeichert werden.
Du magst zwar recht haben, das erst setValueAt() und dann der Renderer aufgerufen wird.
Aber der Renderer wird auch sonst öfters mal aufgerufen, und dann muss er diese Information ja immer noch besitzen und die geänderten Zellen farblich markieren... oder nicht?

Um festzustellen, ob eine Zelle geändert wurde, kannst du ja einen TableModelListener verwenden..


*grüssle*
MeinerEiner
 
Zurück