# Methode fireTableDataChanged()



## Stevvieboy (21. Nov 2010)

Hallo,

ich habe wieder eine Verständnisfrage. Was macht genau die methode firetablechanged.

Sagen wir wir haben eine JTable die ein DefaulTablemodell nutzt. 







Für den DefaultTablemodell wird eine extra Klasse genutzt.


```
class Test extends DefaultTableModell
{

   public String getColumnName(int column) {

      return columnNames[column];
    }

    @Override
    public int getColumnCount() {
      return x
    }

  
    public int getRowCount() {
     xyz
    }

    
    public Object getValueAt(int row, int col) {
    xyz 
      
    }

}

Test t1 = new Test()
JTable j1= new JTable(t1);

t1.fireTableDataChanged();
```


was macht nun genau die methode t1.fireTableDataChanged();  ?

was wird im Hintergrund aufgerufen?  vielleicht die methoden getColumnCount, getrowCount, getValueat ? 

Ich würde mich über eine gute Erläuterung sehr freuen  .

Vielen dank schon im voraus.


----------



## SlaterB (21. Nov 2010)

fireTableDataChanged(); 
informiert alle Zuhörenden (die sich als Listener registriert haben), dass sich die Daten geändert haben,

zu den Zuhörenden gehört normalerweise die anzeigende JTable, die dann diverses neuzeichnet, 
dabei werden wahrscheinlich auch die von dir genannten Methoden aufgerufen, ja


----------



## André Uhres (22. Nov 2010)

Hallo Stevvieboy,

die Methode "AbstractTableModel#fireTableDataChanged" bewirkt das Neuzeichnen der Tabelle von Grund auf. Dabei wird angenommen, dass die Struktur der Tabelle (wie die Reihenfolge der Spalten) dieselbe ist.

Das Neuzeichnen erfordert selbstverständlich den Zugriff auf die darzustellenden Daten des Tablemodels sowie den Zugriff auf die benötigten Cellrenderer. Das schließt den Aufruf der von dir genannten Methoden ein.

Allerdings, wenn wir das DefaultTableModel verwenden (eine Erweiterung vom AbstractTableModel), ist es gewöhnlich nicht nötig, "fireTableDataChanged" aufzurufen. Zur Veränderung der Daten bietet DefaultTableModel nämlich Methoden an, wie addRow, insertRow, moveRow und removeRow, durch die nur der tatsächlich betroffene Teil der Tabelle neugezeichnet wird, was allgemein vorzuziehen ist.

Gruß,
André


----------

