1. Frage .. was willst du mit dem Datenbankobjekt in der setValueAt() ?
Die Funktion public void setValueAt(Object avalue, int row, int column)
des Tablemodels wird immer dann aufgerufen, wenn du eine etwas in deiner Tabelle editierst.
dort musst du also die spiecherlogik implementieren
Wenn zum Beispiel dein Tablemodel als Eigenschaft eine ArrayListe hat würde das ganze so aussehen.
Code:
public void setValueAt(Object avalue, int row, int column)
{
myDataObjekt help = myList.get(row);
//wenn es an der Position noch kein Objekt in der liste gibt .. erzeuge ein neues und hänge es an.
if(help == null){
help = new myDataObjekt();
myList.add(help);
}else{
switch(column){
case 1:help.setName(avalue.toString());
break;
case 2: .... usw....
}
}
//den hier nicht vergessen ... weil was geupdatet wurde.
this.fireTabelDataChange();
}
Damit hättest du deine Liste geändert...
Noch einmal zu dem Spiel mit den 3 Listen:
1. Daten aus der DB werden gelesen in ArrayList geschrieben...
2. ArrayList(der aktuelle Stand der Datenbank) wird an das tbm übergeben und dem Anwender angezeigt.
3. Anwender ändert, löscht, fühgt hinzu...
4. Anwender drückt "Speichern" (erst hier darf die Speicherung auf die DB erfolgen.)
Anbei habe ich noch ein paar fragen...
warum erzeugst du in jeder Funktion ein neues DB-Objekt
is das sinnvoll... vielleich gibst du deinen Tabelmodel die Eigentschaft DB-Objekt mit
normalerweise ist das Tablemodel nämlich nur ein Adapter ...
Stelle es dir wie ein Trichter auf einer Flasche vor ... der einfach nur realisiert, wie die Daten in die Tabelle oder der Whisky und die Cola in die Falsche kommt/en ... die Datenbank zugriffe werden eigentlich nicht direkt im Tablemodel realisiert.
ich poste dir hier nochmal ein Beispiel für ein TableModel was ich mal geschrieben habe .... vielleicht kannst du damit was anfangen ... um zu verstehen was da geht muss ich haber noch sagen, dass ich mir ein Objekt geschrieben habe, Model model = new Model();
dieses Model repräsentiert die Daten .. dort sind 4 Listen vorhanden...
Update,Insert,DeleteList und eine Aktuelle Ansichtslist ...
Code:
/**Feld für das Modelobjekt. */
protected Model model = null;
/**
* Default Konstruktor
*/
public FeiertagsTableModel() {
}
/**
* Konstruktor mit dem DatenModel als Parameter.
*
* @param model
* @throws Exception Falls das ParameterModel null ist.
*/
public FeiertagsTableModel(Model model) throws NullPointerException {
if (model != null) {
this.model = model;
} else {
throw new NullPointerException(
"Fehler im Datenmodel bei der Feiertagstablemodelerzeugung!");
}
this.fireTableDataChanged();
}
/**
* Methode getRowCount
* @return int Anzahl der Zeilen der Tabell
* also die Anzahl der Elemente in der FeiertagsListe im Datenmodel
*/
public int getRowCount() {
return model.feiertageListe.size();
}
/**
* Methode getColumnCount
* @return Konstante 2 weil:
* 1. Spalte das Datum
* 2. Splate die Beschreibung
*/
public int getColumnCount() {
return 2;
}
/**
* Die Funktion getValueAt liest an der übergebenen Position zeile,spalte
* den Wert aus und gibt ihn als entsprechendes Objekt zurück.
*
* @param zeile Position in der Tabelle y
* @param spalte Position in der Tabelle x
* @return Object vom Typ {@link DataFeiertag}
*
*/
public Object getValueAt(int zeile, int spalte) {
DataFeiertag datum = new DataFeiertag();
String sb = new String();
DataFeiertag date = new DataFeiertag();
date = (DataFeiertag)model.feiertageListe.get(zeile);
if ((date.datum == null)) {
sb = "";
} else {
datum = model.feiertageListe.get(zeile);
sb = CalendarUtils.formatDate(datum.datum);
}
if (spalte == 0)
return sb;
else
return datum.beschreibung;
}
/**
* Methode getColumnName
*
* @param spalte
* @return String mit dem Spaltennamen
*/
@Override
public String getColumnName(int spalte) {
if (spalte == 0)
return "Datum:";
else
return "Beschreibung";
}
// Methode isCellEditable returns true
/**
* Methode isCellEditable
* @param zeile
* @param spalte
* @return true Die komplette Tabelle soll editierbar sein
*/
@Override
public boolean isCellEditable(int zeile, int spalte) {
return true;
}
/**
* Die Methode addRow hängt ein Element an die FeiertagsListe und somit an
* die Tabelle an.
* @param anhang
*/
public void addRow(DataFeiertag anhang) {
model.feiertageListe.add(anhang);
model.anhangListe.add(anhang);
this.fireTableDataChanged();
}
/**
* Die Methode removeRow löscht die ausgewählte Zeile in der Tabelle bzw.
* das zugehörige Element in der FeiertageListe.
* @param zeile
*/
public void removeRow(int zeile) {
model.feiertageListe.remove(zeile);
this.fireTableDataChanged();
}
/**
* Die Funktion setValueAt setzt einen Wert in der Tabelle an der Position
* zeile,spalte.
* In der ersten Spalte setzt er ein Datum in der zweiten einen String
* Des weiteren wir bei der Pflege des Datums überprüft ob das in die
* Tabelle eingegebene Datum zulässig ist,
* falls nicht wird der Anwender darauf aufmerksam gemacht.
* Des Weiteren wird der aktualisierte Eintrag der UpdateListe mitgegeben,
* damit die Änderung beim Aufruf des Speichervorgangs auch in die
* Datenbank übernommen wird.
*
* @param eintrag
* @param zeile
* @param spalte
*/
public void setValueAt(Object eintrag, int zeile, int spalte) {
GregorianCalendar gc = new GregorianCalendar();
DataFeiertag datum = model.feiertageListe.get(zeile);
if (this.getRowCount() > 0) {
if (spalte == 0) {
if (eintrag.toString().length() == 10) {
gc.get(Calendar.DATE);
try {
gc.setLenient(false);
gc.setTime(CalendarUtils.parseString(
eintrag.toString()));
datum.datum = gc.getTime();
model.updateListe.add(datum);
} catch (Exception lenient) {
JOptionPane.showMessageDialog(null,
"Dieses Datum gibt es nicht!");
return;
}
} else
JOptionPane.showMessageDialog(null,
"Unzulässiges Datum "
+ "eingegeben!\n Bitte Datum überprüfen!");
} //ende erstes spalten-if
if (spalte == 1 && eintrag.toString().length() < 31) {
datum.beschreibung = eintrag.toString();
} else {
}
}
this.fireTableDataChanged();
}
}
So jetzt hast du ein bischen was zu tun... (zu lesen und zu verstehen vorallem ... wenn Fragen sind einfach melden...)