2009-05-13 16 views
3

JTableがあり、各セルに対して異なる色の3つの文字列、たとえばvalue1(赤色)、value2(青色)、value3(緑色) 。複数の文字列が異なる方法でJTableの同じセルに色付けされている

getTableCellRendererComponentDefaultTableCellRendererであるが、setForeground(Color)の方法では、細胞に示されたすべての文字列に固有の色が得られます。

@Override 
public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    String s = table.getModel().getValueAt(row,column).toString(); 

    StringTokenizer st = new StringTokenizer(s," "); 
    int nToken=st.countTokens(); 

    value1=st.nextToken(); 
    value2=st.nextToken(); 
    value3=st.nextToken(); 
    // so now all the values are blue... 
    setForeground(Color.blue); 

    return super.getTableCellRendererComponent(table, value, isSelected, 
      hasFocus, row, column); 

} 

答えて

2

セルテーブルのデフォルトレンダラーはJLabelです。このコンポーネントはHTMLタグをサポートします。 HTMLを使用してストリングを異なる色でレンダリングするのが最も簡単なソリューションです。したがって、次のような文字列を作成することができます。

レンダラーを気にする必要はありません。

Most swing components allow you to use HTML, this is not only limited to tables.

もう一つの可能​​性は、あなたがJComponentのから拡張するクラスを作成することで、プログラムpaintComponent()ので、色違いでこれらの3つの文字列を描画します。次に、このコンポーネントをレンダラーとして設定できます。しかし、これはもっと複雑です。レンダラーは「スタンプ」のように機能するため、セルが描画されるときに適切な色がスタンプされます。これは、たとえば、非常に複雑でカスタムのグラフィックスをセルに描画する必要がある場合に便利です。

膨大な量のセルがない場合は、HTMLを使用します。

+1

HTMLコンポーネントは、非常に迅速に非常に遅くなります。コンポーネントをキャッシュすることはできますが、それは特殊な場合以外には難しくなります。 –

+0

代わりに、独自のJComponentを書くことは高速です。しかし、それを正しくするのは難しい –

3

JIDEはオープンソースのCommon Layerの一部としてStyledLabelを提供しています。これはあなたが望むものであり、何かを自分で実装するより10倍簡単です。表中の

https://jide-oss.dev.java.net/

alt text

関連する問題