2010-11-19 14 views
1

Ich versuche, eine Tabelle mit Rowersorter zu sortieren.JTable Renderer mit Sortierung

RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); 
cTable.setRowSorter(sorter); 

Ich verwende einen Renderer, der DefaultTableCellRenderer erweitert. Ich verwende den Renderer, um den Inhalt der Zelle basierend auf dem Wert in einer bestimmten Farbe zu zeichnen.

cTable.setDefaultRenderer(Object.class,new <renderer name>()); 

zB:

public Component getTableCellRendererComponent(JTable table, Object v, 
      boolean isSelected, boolean hasFocus, int row, int column) 
    { 

     super.getTableCellRendererComponent(table, v, isSelected, hasFocus, 
        row, column); 
int k=table.getValueAt(row,column); 
    if (k >= 0)        this.setForeground(Color.red); 
} 

Hinweis: Dies ist nur ein Beispiel code.No echte Funktionalität. Wenn ich sortiere, geschieht Sortierung perfekt, aber die Renderer-Funktionalität der Änderung der Farbe ist nicht passiert. Hat jemand dieses Problem früher konfrontiert Bitte helfen

Antwort

4

Sie müssen die Logik in Ihrem Renderer erweitern:

if (isSelected) { 
    this.setForeground(table.getSelectionForeground()); 
} else if (k >= 0) { 
    this.setForeground(Color.red); 
} else { 
    this.setForeground(table.getForegroundColor()); 
} 

Sie können auch die Hintergrundfarbe auf jede Bedingung abhängig einstellen möchten. Der Grund dafür ist, dass die DefaultTableCellRenderer wie ein "Gummistempel" wirkt, der wiederum auf jede Zelle angewendet wird. Wenn z. B. die Zelle in Zeile 5, Spalte 1, einen Wert von k> = 0 hat, wechseln Sie für diese Zelle und alle nachfolgenden Zellen die Vordergrundfarbe in Rot . Daher ist es wichtig, explizit zurückgesetzt auf die "normale" Vordergrundfarbe, wenn Ihre Prüfung fehlschlägt.