2012-03-20 1 views
5

JXTableを使用していますが、JTableのDefaultRenderersに基づいてこれを行う方法はわかっていますが、JXTable - HighlighterPipelineに基づいて親しみやすいSwingX JXTable:「行オブジェクト」に基づいて行を色付けするためにColorHighlighterを使用する

テーブルに表示されるオブジェクトのリストがあり、各行は1つのオブジェクトを表します。私は特定のタイプのオブジェクトを表示する行を別の色に色付けしたいと思います。

私はColorHighlighterを使用しているようです。しかし、私はこれのための例を見つけることができません、単純な蛍光灯以外の "他の行ごとの色"またはいくつかのもののようなもの。

JTable/TableModelパラダイムには「行オブジェクト」はないので行番号が必要ですが、これを行うことができれば簡単に述語をテストして真/偽を返してハイライターに伝えますキックインかどうか。

誰かがこれを正しく動作させるための正しい方向を見つけ出す手助けをすることができますか?

答えて

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

+0

を呼び出してください。ありがとうございます。GlazedListsの並べ替え機能を使用するためにJXTableの並べ替えを無効にしています。そのため、インデックスは最後に表示された行と一貫しています。しかし、ありがとう! –

+0

p.s.蛍光灯のパイプラインには何が起こったのですか?彼らは行ったのですか?私はJXTableハイライトの一般的な情報を見つけようとしています。 –

関連する問題