3

JTableセルごとに、value1(赤)、value2(青)、value3(緑)などの異なる色の3つの文字列を表示するとします。

私はのを上書きしましたgetTableCellRendererComponentDefaultTableCellRenderersetForeground(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);

}
4

2 に答える 2

3

JIDEは、オープンソースの共通レイヤーの一部としてStyledLabelを提供します。これはまさにあなたが望むものであり、自分で何かを実装するよりも10倍簡単です。

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

代替テキスト

于 2009-05-13T17:17:40.060 に答える
2

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

 <html><font color="blue">A String</font><font color="red">Another String</font></html>

そしてそれをセルに設定すれば、レンダラーについて心配する必要はありません。

ほとんどのswingコンポーネントではHTMLを使用できますが、これはテーブルだけに限定されません。

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

大量のセルがない場合は、HTMLを使用することに固執します。

于 2009-05-13T14:51:06.510 に答える