2012-03-03 20 views
2

現在、私は現在7つの列と多数の行のデータからなるJTableを持っています。JTableの列内の色のセル

第7列の各セルにどのように色付けするのですか?セル内のデータに応じて色付けしたい。

ので、第七列のセルのいずれかが0を下回ると言った場合、私は赤い色にしたいか、7列のセルの1等

感謝緑以上の0、そして色をした場合あなた

+0

@deporter Ehhh ..(うわべ)私はちょうど次の質問に進みます。 –

+0

@AndrewThompsonあなたは正しいです。 – Juvanis

+0

申し訳ありません、私はちょうど今からそうする方法を学びました。 –

答えて

4

TableCellRendererを使用して、テーブル内の個々のセルのカスタムスタイルを作成できます。このtutorialについて詳しく説明しています。このページには、必要な開始点であるかもしれないカラーレンダラーを使用する例があります。

2

prepareRenderer()メソッドをオーバーライドすると、テーブルオブジェクトを初期化し、それに応じて色を変更する特定の条件を設定すると、定義された色の変更がアプリケーションに反映されます。あなたはグローバルJTableの変数tableを持っていると仮定してmodelがあなたのDefaultTableModelのインスタンスになりましょう:

table = new JTable(model) 
{ 
    public Component prepareRenderer (TableCellRenderer r, int row, int col) 
    { 
     Component comp = super.prepareRenderer(r, row, col); 
     if (col == 6 && !isCellSelected(row, col)) 
     { 
      if (table.getValueAt(row, col) < 0) 
       comp.setBackground(Color.RED); 
      else 
       comp.setBackground(Color.GREEN); 
     } 
     return comp; 
    } 
}; 

あなたは列のインデックス6に対応して第七列を、色付けしたいので、上記のコードは、(それが0から始まる)col == 6をチェックして。内部のifステートメントでは、セルの値をチェックし、それに応じてセルの背景色を変更します。

+2

実行可能な間は、特定の列に視覚的な装飾が必要なこのユースケースではお勧めできません。これは、カスタムレンダラーが処理するよう設計された「軽量」タスクです。一方、テーブルのオーバーライドは「ヘビーウェイト」のメジャーです:一般的なルールとして、アプリケーションのニーズに合わせてJSomethingを拡張するべきではないことに留意してください。 – kleopatra

+0

@kleopatraあなたの建設的なコメントに感謝します。私は今後の問題でこのコメントを使用しようとします。 – Juvanis

関連する問題