2012-03-20 63 views
5

我正在使用JXTable,並且我知道如何基於JTable的DefaultRenderer執行此操作,但是我想知道如何以JXTable的方式執行此操作基於HighlighterPipeline的友好型。SwingX JXTable:使用ColorHighlighter爲基於「行對象」的行着色

我有一個表格中顯示的對象列表,每行代表一個對象。我想爲顯示某種類型的對象的行着色不同的顏色。

看起來我應該使用ColorHighlighter。但我找不到這樣的例子,除了簡單的熒光筆,比如「隔行掃描」或其他類似的東西。

我需要行號,因爲在JTable/TableModel範例中沒有「行對象」這樣的事情,但如果我能做到這一點,我可以很容易地測試一個謂詞並返回true/false來告訴突出顯示者踢或不踢。

有人可以幫我找出正確的方向來得到這個工作嗎?

回答

4

沒關係,我想通了。很難弄清楚使用ComponentAdapter屬性的方式。

JXTable table = ... 
final List<Item> itemList = ... 

final HighlightPredicate myPredicate = new HighlightPredicate() { 
     @Override 
     public boolean isHighlighted(
      Component renderer, 
      ComponentAdapter adapter) { 

      Item item = itemList.get(adapter.row); 
      return testItem(item); 
     } 

     public boolean testItem(Item item) { ... } 
} 

ColorHighlighter highlighter = new ColorHighlighter(
     myPredicate, 
     Color.RED, // background color 
     null);  // no change in foreground color 

table.addHighlighter(highlighter); 
+1

高興你找到了解決辦法 - 只是要注意:adapter.row是鑑於座標,而你itemList中(最有可能?)是在模型座標,所以如果該表的排序測試將返回不正確的結果/過濾。要修復,請調用adapter.convertRowIndexToModel – kleopatra 2012-03-21 10:02:42

+0

好的,謝謝 - 我禁用JXTable的排序目的是使用GlazedLists排序工具,所以我的索引與最終顯示的行是一致的。儘管謝謝! – 2012-03-21 12:46:50

+0

p.s.熒光筆管道發生了什麼事?他們走了嗎?我試圖找到有關JXTable熒光筆的一般信息,它是過時的東西的隨機集合。 – 2012-03-21 12:48:06