# AbstractTableModel + Vector - Wie Zeile hinzufügen



## fugu (8. Jun 2007)

Ich versuche nun seit geraumer Zeit mit Java eine kleine Applikation zu schreiben, welche Daten aus einer MySQL-Tabelle ausliest und in einer JTable darstellt. Zusätzlich soll man noch die Möglichkeit haben, Datensätze zu löschen und neue hinzuzufügen.
Mit Hilfe dieses Forums und google habe ich das Programm nun auch so weit, dass alles bis auf das hinzufügen von Zeilen mit anschließender Aktualisierung der Tabelle funktioniert.

Meine Frage ist nun, wie ich die Funktion setValueAt gestalten muss, damit der Tabelle erfolgreich Zeilen hinzugefügt werden können. Beispiele die ich zu diesem Thema gefunden hatte, beinhalteten meist ein Object[][] in der setValueAt Funktion. Da ich in Sachen Java noch kaum Erfahrung habe, konnte ich mir diese Beispiele leider nicht erfolgreich auf einen Vector umstricken.
Ein ähnliches Problem ergab sich auch schon bei der getValueAt Funktion, zu diesem konnte ich allerdings eine Lösung finden.

Ich würde mich sehr freuen, wenn mir jemand mit meinem Problem helfen könnte.

Im Anhang mein Quelltext der AbstractTableModel Klasse.


```
class MyTableModel extends AbstractTableModel {
		private String[] columnNames = {"Name", "Beschreibung", "Version", "ID"};
	    private Vector data = dbConnection.getTableData(); 

	    public int getColumnCount() {
	        return columnNames.length;
	    }

	    public int getRowCount() {
	        return data.size();
	    }

	    public String getColumnName(int col) {
	        return columnNames[col];
	    }

	    public Object getValueAt(int row, int col) {
	    	Vector colVector = (Vector) data.elementAt(row);
	    	return colVector.elementAt(col);
	    }
	    
	    public boolean isCellEditable(int row, int col) {
	    	return false;
	    }
	    
	    public void removeRow(int row) {
	    	data.removeElementAt(row);
	    	fireTableRowsDeleted(row, row);
	    }
	    
	}
```


----------



## André Uhres (8. Jun 2007)

Man braucht dazu nur das "DefaultTableModel" zu nehmen, dort ist "addRow" schon drin (und natürlich auch alles andere):

```
String[] columnNames = {"Name", "Beschreibung", "Version", "ID"};
        Vector columnNamesV = new Vector();
        for (int column = 0; column < columnNames.length; column++)
            columnNamesV.addElement(columnNames[column]);
        Vector data = dbConnection.getTableData();
        DefaultTableModel model = new DefaultTableModel(data, columnNamesV){
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
```


----------



## fugu (8. Jun 2007)

Wären dort auch die ganzen fireTable... Funktionen dabei, sodass sich die Ansicht der JTable aktualisieren würde?
Die Geschichte mit dem AbstractTableModel hatte ich gewählt, weil ich dachte nur darüber könne man diese Ereignisse nutzen.
Auf jeden Fall schon einmal vielen Dank.


----------



## André Uhres (8. Jun 2007)

fugu hat gesagt.:
			
		

> Wären dort auch die ganzen fireTable... Funktionen dabei, sodass sich die Ansicht der JTable aktualisieren würde?..


Alles dabei


----------



## fugu (8. Jun 2007)

Dann werde ich doch direkt mal mein Glück mit dem DefaultTableModel probieren. Vielen Dank für deine Hilfe  .


----------

