2010-11-19 117 views
1

我想排序使用rowsorter表。JTable渲染器與排序

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,則您正在將該單元格和所有後續單元格的前景色切換爲紅色。因此,如果您的檢查失敗,明確將其重新設置爲爲「正常」前景色很重要。