2012-04-13 14 views
0

Netbeansでデスクトップアプリケーションを作成しましたが、文字列の値が "処理中"の場合は、特定のセルの色を変更します。私は手動で入力する場合 私はnetbeansでセルの色が変更されない

class CustomTableCellRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent (JTable table, Object obj, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     Component cell = super.getTableCellRendererComponent(
      table, obj, isSelected, hasFocus, row, column); 
     if (obj=="on Process") { 
      cell.setBackground(Color.green); 
     } 
     return cell; 
    } 
} 

を試みたが、私のtableIが

table.getColumnModel().getColumn(7).setCellRenderer(new CustomTableCellRenderer()); 

I`mは、データベースから値を取得し、ここでのステ​​ータスを

for(int i=0; i<arraylist.size(); i++) { 
    table.setValueAt(status, i, 7); 
} 

を使用しての使用変更されていないが、Stringですlike:

table.setValueAt("on Process", i, 7); 

それは色が変わっても問題ありませんが、そのようにタイプすることはできません。変数から値を設定する必要があります。私はString、Object、no useを試しました! 私はtoString()を試しましたが、 "+ステータス"を試しました...それは私が割り当てたものを無視しているだけです。 forloopの中で "on process"と入力すると機能しますが、forloopの外側で変数から割り当てることができ、色が変わります。私は混乱している、何をすべきかわからない。 私を助けてください。

答えて

4

あなたはこの必要があります。

if(obj.toString().equals("on Process")) 

の代わり:Eng.Fouad @

if(obj=="on Process") 
+0

返信いただきありがとうございます。しかし、if(obj.toString()。equals( "on process"))を使用すると、NullPointerExceptionがスローされます。 – Jamol

+0

@ user1290988それで 'if(obj!= null && obj.toString()。equals(" on Process "))' –

+0

+1良いキャッチ; more [here](http://stackoverflow.com/a/10150532/230513)。 – trashgod

1

equals()==を区別に関する権利です。このexampleに示すように、TableModelが指定した列の希望するtype tokenを返すことも確認する必要があります。 DefaultTableModelは単にObject.classを返します。

+0

columnClassはしばしば原因です - このコンテキストでは、OPが列ごとのレンダラーを使用しているべきではありません。データベースからの更新によってstructureChangedがトリガーされた場合、問題が発生する可能性があります。 @ user1290988、それは? – kleopatra

+0

@kleopatraが正しいです: 'getCellRenderer()'は、 'TableColumn'レンダラーを最初に見つけます。 'fireTableStructureChanged()'は、 "新しい列の型が違うかもしれません。"変更がなければ 'setValueAt()'と 'String'リテラルが列レンダラーを見つける理由を説明します。 – trashgod

関連する問題