# Daten im JTable speichern



## vaDer.bln (26. Apr 2005)

Ich habe ein JTable und möchte den Inhalt (z.B. Name, Telenummer usw.) speichern so das  ich beim nächsten mal wenn ich das JTable öffne die alten Werte wieder sehe und neue Werte dazueintragen kann. Was macht sich dafür am besten? Meine Werte werden im JTableModel in Object [] gespeichert. Soll ich dann jede Zeile einzeln in einen txt. File speichern?


----------



## Sky (26. Apr 2005)

- Schleife um Zeile und Schleife um Spalten -> Wert auslesen und per PrintWriter wegschreiben
- oder das Model in eine Datei rausschreiben (Stichwort: Serializable)


----------



## vaDer.bln (26. Apr 2005)

Kann ich denn wenn ich die Daten serialisiere auch wieder ins Model laden? Ich dachte eigentlich halt an eine Einfach Lösung ala jede Zeile in ein txt File Speichern und beim Starten wird dieses Textfile wieder ausgelesen. Müßte doch gehen oder?


----------



## Sky (26. Apr 2005)

1.) ja, das Model kannst Du wieder laden
2.) ja, die Lösung geht auch


----------



## vaDer.bln (27. Apr 2005)

Gibs zu 1) irgendwo Material zum ansehen? bzw ein Beispiel?


----------



## Sky (27. Apr 2005)

Ist eigentlich gar nicht so schwer... ein bißchen API-Lesen hilft da schon weiter!!!!

Gegeben sei die Daten-Klasse

```
class Data implements Serializable {
  private String string;

  public Data( String newString ) {
    string = newString;
  }
}
```

Rausschreiben geht dann so:

```
//Daten erstellen
Data dummyData = new Data( "abc");
// Stream erstellen
ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("c:/testfile.oos"));
// Daten rausschreiben
oos.writeObject(dummyData);
```


----------



## vaDer.bln (27. Apr 2005)

bei TableModel gibs gar keine Funtkion mit der man eine Zeile als String auslesen kann oder?


----------



## Sky (27. Apr 2005)

Hallo? Kannst Du denn nicht mal in der API gucken... wenn's da nix gibt, dann mußt Du es wohl selbst machen:


```
public String getRowAsString( int row, String delim ) {
    StringBuffer sb = new StringBuffer();
    // table ist eine JTable. du kannst auch direkt ein TableModel nutzen
    for ( int i = 0; i < table.getColumnCount(); i++ ) {
      sb.append(table.getValueAt(row, i));
      sb.append(delim);
    }
    return sb.toString();
  }
```


----------



## vaDer.bln (27. Apr 2005)

Hab zur Zeit noch ein ArrayIndexOutOfBoundsException: 1 aber so müßte doch ungefähr aussehen?!

```
TableModel model = new TableModel();
		jTable = new JTable(model);
		
		String tableinhalt = getRowAsString(model.getRowCount(),new String());
		

public String getRowAsString( int row, String delim ) { 
        StringBuffer sb = new StringBuffer(); 
        // table ist eine JTable. du kannst auch direkt ein TableModel nutzen 
        for ( int i = 0; i < jTable.getModel().getColumnCount(); i++ ) { 
          sb.append(jTable.getModel().getValueAt(row, i)); 
          sb.append(delim); 
        } 
        return sb.toString(); 
    }
```


----------



## Sky (27. Apr 2005)

Der Fehler liegt in Zeile 5. 

model.getRowCount() gibt die Anzahl der Zeilen zurück (in deinem Fall "1") Wenn Du nun darauf zugreifen willst musst Du das ganze für row = 0 aufrufen


----------



## vaDer.bln (27. Apr 2005)

Ja das war der Fehler. Super. Danke


----------



## Sky (27. Apr 2005)

Dann mach'n Hacken dran (unten links)


----------

