2012-02-22 2 views
3

Я написал таблицу по умолчанию делают следующим образом:Обновить JTable когда setAutoCreateRowSorter верно

public class CustTableRenderer extends DefaultTableCellRenderer{ 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { 
     Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 
     try { 

      Object cellObj = table.getModel().getValueAt(row, 7); 
      double cellValue = (Double) cellObj; 

      if (cellValue < 0) { 
       comp.setBackground(new Color(255, 48, 48)); 
      } else if (cellValue == 0) { 
       comp.setBackground(new Color(173, 255, 47)); 
      } else { 
       comp.setBackground(Color.white); 
      } 

      if (isSelected) { 
       comp.setBackground(new Color(71, 60, 139)); 
       TableModel model = table.getModel(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return comp; 
    } 
} 

Чтобы выделить строки, которые содержат значения со знаком минус в колонке 7, я также набор setAutoCreateRowSorter к true. Моя проблема заключается в том, что когда я нажимаю заголовок для сортировки в соответствии с ним, таблица сортируется, но выделенная строка не изменяется, поэтому подсвечивается неправильная строка.

Как перерисовать таблицу при ее сортировке?

+1

Приложить http://docs.oracle.com/javase/6 /docs/api/javax/swing/event/RowSorterListener.html в таблицу, а в методе делегата вызовите doLayout таблицы. – govi

+0

@govi - Нет, инструкция doLayout не нужна. Если это, кажется, решает проблему, есть что-то действительно неправильное в другом месте – kleopatra

+0

@ kleopatra - хм. да, это правда. – govi

ответ

7

координаты, передаваемая в визуализатор в целях системы координат, вы должны преобразовать их в координатах модели, прежде чем получить доступ к модели:

int modelRow = table.convertRowIndexToModel(row); 
    int modelColumn = table.convertColumnIndexToModel(column); 
    cellObject = table.getModel().getValueAt(modelRow, modelColumn); 
+0

: @ Keleopatra-> Thanx много – Harsha

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