2012-10-29 51 views
1

我有一個JXTable與自定義表模型。我用自定義的HighlightPredicate添加了2個ColorHighlighter。JXTable - 如何在排序表上更新熒光筆

問題是當我點擊列標題時,表格對行進行排序,但是熒光筆仍保留舊視圖。

如何在排序表後更新高亮狀態?

+1

已將視圖索引轉換爲模型'model int modelRow = convertRowIndexToModel(row)',也許works,可能不取決於SwingX版本, – mKorbel

+1

還有一些其他問題,最好可以發佈[SSCCE](http: /sscce.org/),簡短,可運行,可編譯,適用於潛在的應答者和未來的讀者 – mKorbel

+0

謝謝,我今天晚些時候會添加一個簡單的例子。 – drzymala

回答

0

正如@kleopatra提到的,我看着我的斷言:

HighlightPredicate spakowany = new HighlightPredicate() { 
     @Override 
     public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { 
      TableModel tableModel = table.getModel(); 
      if (tableModel instanceof StanTableModel) { 
       StanTableModel stanTableModel = (StanTableModel) tableModel; 
       // int rowIndex = adapter.row; <- this was the issue 
       int rowIndex = adapter.convertRowIndexToModel(adapter.row); 
       StanTableRow myCustomRow = stanTableModel.getRow(rowIndex); 
       if ((myCustomRow.isSpakowany()) { 
        return true; 
       } 
      } 
      return false; 
     } 
    }; 

和使用@mKorbel想法:

是:

int rowIndex = adapter.row; 

現在是:

int rowIndex = adapter.convertRowIndexToModel(adapter.row); 

它現在可以工作。

StanTableModel是我的自定義表模型。它具有getRow()函數並返回一個StanTableRow對象,該對象又具有isSpakowany()函數。

+1

很高興你發現了這個問題:-)考慮用正確的工作線(即帶有轉換後的rowIndex的那一行)更改代碼片段,否則有點混亂。 – kleopatra

+0

@kleopatra是否有另一種方式,意思是'HighlightPredicate'和'getTableModel',不能脆弱? – mKorbel