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 now 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?
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.