views:

893

answers:

1

Info - for better formatting, I used code-formatting throughout the whole posting.

Hi,

I have a highlighted JXTable. Rows are highlighted, depending on the value 
of a specific column (c2). Everytime the value of column c2 changes, the color 
is switched from white to grey or from grey to white.

Example    
    c0  c1    c2   c3
    1 | aaa | ab | dd
    2 | aaa | ab | ee
    3 | aaa | cd | ff
    4 | aaa | cd | gg
    5 | bbb | ef | dd

Colors are like this:
1,2 -> white
3,4 -> grey
5   -> white

If I know filter for 'dd', my table looks like this

    c0  c1    c2   c3
    1 | aaa | ab | dd
    5 | bbb | ef | dd

And the colors are like this:
1 -> white
5 -> white

But I want the table to change the color of row 5, because the previous 
value in c2 was different.
See my Problem? How can I apply the highlighter again, on my JXTAble, 
after filtering? Or in other words, how can I highlight only the filtered 
values?
A: 

Could you just add a second highlighter ?

jxTable.getHighlighters().addHighlighter()

One which would only apply itself when the JXtable is effectively filtered.

If that is not possible, because once a row has been highlighted, the other highlighters may not be called, you could define a controller which:

a) has a propertyChangeListner to the table, listening for filtered state

b) has the special Predicate with the set of rows and the highlighter

c) on propertyChange check the row, toggle the highlighter's predicate between NEVER and your custom as appropriate. The highlighter's property change will trigger the repaint

Forcing a repaint is basically what does the HighlighterClientVisualCheck sample in the test.org.jdesktop.swingx.renderer package.

VonC