JXTreeTable の異なる列に異なるレンダラーを割り当てるにはどうすればよいですか。JXtreeTable には、さまざまな列タイプ (通貨、日付など) があります。JXTable では、getColumn(identifier).setCellRender(TableCellRender) メソッドを使用しました。JXTreeTable はどうすればよいですか?
1 に答える
同じタイプのすべての列が同等に処理される限り、クラスごとにデフォルトのレンダラーを割り当てることができます。たとえば、テーブルに java.util.Date 値を持つ 2 つの列があり、両方を同じ方法で処理したいとします。
myTreeTable.setDefaultRenderer(java.util.Date.class, new DefaultTableRenderer(StringValues.DATE_TO_STRING));
最初の引数は、このレンダラーで処理するオブジェクトのタイプです。2 番目の引数は、セル レンダラーです。SwingX には、DefaultTableRenderer と呼ばれる非常に単純なレンダリング メカニズムが付属しています。いくつかの可能な引数を取りますが、最も単純なものはStringValueインスタンスを提供することです。これは、実装時に任意のオブジェクトを受け取り、それを何らかの方法で文字列に変換するインターフェイスです。StringValues クラスには、定義済みの実装がいくつか含まれています。上記の例では、セル内の java.util.Date オブジェクトをデフォルトの DateFormat インスタンスに渡し、文字列の結果を返す StringValues.DATE_TO_STRING を使用しています。処理したいオブジェクトのすべてのクラスについて、このように続けます。
単一の列のみに特定のレンダリングが必要な場合は、列を呼び出しの途中に接続するだけです。
myTreeTable.getColumnExt(myColumnIdentifier).setCellRenderer(java.util.Date.class, new DefaultTableRenderer(myGloriousStringValueConverter));
呼び出しがsetDefaultCellRendererではなくなったことに注意してください。
このレンダリング メカニズムは、SwingX の優れた機能の 1 つです。使いやすく、ハイライター パイプラインと組み合わせると非常に強力です。
これはすべて、JXTreeTable のテーブル部分に当てはまります。階層列 (最初の列) は同じ方法でセットアップできますが、呼び出しが
myTreeTable.setTreeCellRenderer(new DefaultTreeRenderer(myGloriousStringValue));