2012-03-20 58 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