JTable рендер с сортировкой - PullRequest
       0

JTable рендер с сортировкой

1 голос
/ 19 ноября 2010

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

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

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

1 Ответ

4 голосов
/ 19 ноября 2010

Вам необходимо расширить логику в вашем рендерере до:

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

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

...