2012-03-10 26 views
1

Ok、私は過去の露の時間にこれを試みてきましたが、絶望的になっています。JTable内の列に特定のセルを塗りつぶし

したがって、2番目の列にセルのレンダリングを適用します。

stockTable.setCellRender(jtSpread.getColumnModel().getColumn(1)); 

と呼ばれる方法は、以下のコードを有するsetCellRenderある:上記

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 

    for(int i = 0; i < rows; i++) { 
     if(row == i && column == 2) { 

     } 
    } 
    return this; 
} 

不完全及び完全な混乱である:私のCellRendererクラスは、次のコードを有する

public void setCellRender(TableColumn column) 
{ 
    column.setCellRenderer(new cellRenderer(data, rows)); 
} 

。私の目的は、各セルに条件があるかどうかをチェックすることです。真であれば、緑の前景でラベルを返します。 falseの場合、赤の前景でラベルを返します。私は列内のすべてのセルを1つずつチェックしたいと思います。各条件は各セルに固有のものです。

EDIT:それ自身の条件を有する各セルに関しては、例えば、

最初のセルの値は600です。配列[0]の内容が高ければ、配列[0]と照合したいと思います。

2番目のセルの値は626です。配列[1]の内容が高ければ、配列[1]に対してチェックしたいと思います。このメソッドが呼び出される(このようになります。そして、

CellRenderer extends DefaultTableCellRenderer { 
    ... 

getTableCellRendererComponent()

は私が

+0

したがって、各セルの条件は異なりますか?テーブル全体を横切って、あるいは列を横切ってまっすぐに? –

+0

私はちょうど私の投稿を更新しました: –

+0

あなたのアプローチは間違っています:レンダラーは、レンダリングしようとしているセルについて_only_を心配しています。あなたがその概念を理解していることを確認してください、f.i. – kleopatra

答えて

5

あなたのレンダラーがDefaultTableCellRenderer拡張していることを確認し、アレイ内のすべての値に対して、列のすべてのセルのために続けていきたいですセルがレンダリングされるたびに):

public Component getTableCellRendererComponent(JTable table, Object value, 
    boolean isSelected, boolean hasFocus, int row, int column) { 

    Component cellComponent = super.getTableCellRendererComponent(
      table, value, isSelected, hasFocus, row, column); 
    cellComponent.setForeground(isMyConditionFullfilled(value) ? Color.GREEN : Color.RED); 
    return cellComponent;  
} 
1

あなたのレンダリングクラスがTableCellRender するTryティを実装する必要がありますあなたのレンダリングクラスのS:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     JLabel label = new JLabel(); 
     label.setOpaque(true); 
     if (value != null && value.equals("text")) { //Checking if cell´s values isnt null and the condition is true 
      label.setBackground(Color.GREEN); 
     }else{ 
      label.setBackground(Color.RED); 
     } 
     return label; 
    } 

レンダリングがどれだけ各セルをレンダリングすることを教え、彼自身によって各セルをチェックします。変数 "value"には各行の値が含まれているため、条件を確認するために使用できます。列の型が定義されている場合は、変数 "value"をキャストします。 たとえば、セルにDouble型が定義されている場合:

double valDouble = (Double) value; 
if (value != null && value == 5.00) { //Checking if cell´s values isnt null and the condition is true 
     label.setBackground(Color.GREEN); 
}else{ 
     label.setBackground(Color.RED); 
    } 
+0

などの基本チュートリアルを読んでください。助けてくれてありがとう、ちょうど私が立ち上がったオリジナルの投稿をチェックしてください。私は各セルのチェックを行いました。これに対応する方法があるかどうかをチェックして教えてください。 –

+1

オリジナルのポストを修正して説明するための曖昧なコメントを付けることの問題の1つは残りの質問が何であるかはもうわかりません。これらの投稿のどちらもあなたの質問に答えなかったでしょうか?彼らはどのように答えなかったのですか?私はこのスレッドで別の答えを出すほうがいいと思うので、読者はあなたが元のaとbとcを参照しているのを見て、aとbの部分に答えましたが、c ... – arcy

+0

レンダラーが呼び出されるたびに新しいJLabelを作成するための-1(これは_often_です)代わりにfiコンストラクタで再利用します。 – kleopatra

関連する問題