2010-11-19 3 views
1

Я пытаюсь сортировать таблицу с помощью roworter.JTable renderer with sorting

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

Я использую средство визуализации, которое расширяет значение DefaultTableCellRenderer. Я использую средство визуализации для рисования содержимого ячейки в некотором цвете, исходя из ее значения.

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

например:

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); 
} 

Примечание: Это всего лишь пример code.No реальной функциональности. Когда я сортирую, сортировка происходит отлично, но функция рендеринга изменения цвета не происходит. Кто-нибудь сталкивался с этой проблемой раньше Пожалуйста, помогите

ответ

4

Вы должны расширить логику в видеообработки для:

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

Вы также можете установить цвет фона в зависимости от каждого состояния. Причина этого заключается в том, что DefaultTableCellRenderer действует как «резиновый штамп», который применяется к каждой ячейке по очереди. Если, например, ячейка в строке 5, столбец 1 имеет значение k> = 0, то вы переключаете цвет переднего плана на красный для этой ячейки и всех последующих ячеек. Поэтому важно, чтобы явно установил его обратно на «обычный» цвет переднего плана, если ваш чек не прошел.

Смежные вопросы