2012-04-13 11 views
0

Ich erstellte Desktop-Anwendung mit Netbeans, und ich möchte eine bestimmte Zellfarbe ändern, wenn es String-Wert von "on Process" hat. Ich versuchteÄnderung der Zellfarbe funktioniert nicht auf 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; 
    } 
} 

aber es ändert nicht meine tableI

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

I`m immer Werte aus der Datenbank und mit

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

hier Status ist String, wenn ich manuell eingeben wie:

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

es ändert die Farbe, es ist in Ordnung, aber ich kann es nicht so tippen, ich muss Wert von Variable einstellen. Ich habe versucht String, Objekt, nutzlos! Ich versuchte toString(), ich versuchte "" + Status, ... es ignoriert nur, was ich ihm zuweisen. Innerhalb Forloop, wenn ich "on Process" eintippen funktioniert es, aber außerhalb forloop kann ich von Variable zuweisen, ändert es die Farbe. Ich bin verwirrt, weiß nicht, was ich tun soll. Bitte helfen Sie mir.

Antwort

4

Sie müssen dies:

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

statt:

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

Danke für die Antwort. Aber wenn ich if (obj.toString(). Equals ("on Process")), wird es NullPointerException werfen. – Jamol

+0

@ user1290988 dann verwenden, 'if (obj! = Null && obj.toString(). Gleich (" auf Prozess "))' –

+0

+1 guten Fang; mehr [hier] (http://stackoverflow.com/a/10150532/230513). – trashgod

1

@ Eng.Fouad ist recht zwischen equals() und == unterscheiden. Sie müssen außerdem überprüfen, ob TableModel den gewünschten Wert type token für die von Ihnen angegebene Spalte zurückgibt, wie in dieser example gezeigt. Die DefaultTableModel gibt einfach Object.class zurück.

+0

columnClasses ist oft der Übeltäter - sollte in diesem Zusammenhang nicht, da das OP einen pro-Spalten-Renderer verwendet. Was könnte das Problem sein, wenn das Update von der Datenbank eine structureChanged auslöst. @ user1290988, oder? – kleopatra

+0

@kleopatra hat recht: 'getCellRenderer()' sollte zuerst den 'TableColumn' Renderer finden. Ein 'fireTableStructureChanged()' kann dazu führen, dass die "Typen der neuen Spalten unterschiedlich sein können". Keine Änderung würde erklären, warum 'setValueAt()' mit einem 'String'-Literal den Spalten-Renderer findet. – trashgod