2012-04-13 56 views
0

我使用Netbeans創建了桌面應用程序,並且如果字符串值爲「on Process」,我想更改特定的單元格顏色。 我試圖更改單元格顏色在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; 
    } 
} 

,但它並沒有改變我的表Ⅰ使用

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

我真的正從數據庫中值,並使用

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

這裏狀態爲String,如果我手動型如:

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

它改變顏色,它很好,但我不能這樣輸入,我需要從變量中設置值。我試過String,Object,沒用! 我試過toString(),我試過「」+狀態,......它只是無視我分配給它的東西。 裏面forloop如果我鍵入「在過程」它的作品,但外部forloop我可以從變量分配,它會改變顏色。我很困惑,不知道該怎麼做。 請幫幫我。

回答

4

你需要這樣的:

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

代替:

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

感謝您的回覆。但如果我使用if(obj.toString()。equals(「on Process」))它拋出NullPointerException。 – Jamol 2012-04-13 16:59:44

+0

@ user1290988然後使用'if(obj!= null && obj.toString()。equals(「on Process」))' – 2012-04-13 18:44:22

+0

+1 good catch;更多[這裏](http://stackoverflow.com/a/10150532/230513)。 – trashgod 2012-04-14 02:31:17

1

@ Eng.Fouad是正確的約equals()==區分。您還需要驗證您的TableModel是否爲您指定的列返回所需的type token,如此example所示。 DefaultTableModel只是返回Object.class

+0

columnClasss通常是罪魁禍首 - 不應該在此上下文中,因爲OP正在使用每列渲染器。如果來自數據庫的更新觸發了一個structureChanged,那可能是這個問題。 @ user1290988,是嗎? – kleopatra 2012-04-14 09:10:01

+0

@kleopatra是對的:'getCellRenderer()'應該首先找到'TableColumn'的渲染器。 'fireTableStructureChanged()'可能會導致「新列的類型可能不同。」沒有任何變化可以解釋爲什麼'setValueAt()'帶有'String'字面值會找到列渲染器。 – trashgod 2012-04-14 17:18:03