Zwei Fragen zu TableModel

philbo

Mitglied
Hallo...
ich hätte noch zwei Probleme, die ich im Rahmen mit meinem Tablemodel nicht gelöst bekomme.
Erstens:
Ich wähle eine Zeile aus, ändere darin Werte und schreibe die Änderungen auf Buttonklick in meine DB. Das klappt auch soweit, allerdings wird die Zelle, die momentan "aktiv" ist, also wo der Cursor ist nicht korrekt übernommen. Hier werden noch die "alten Inhalte" in die DB geschrieben. Erst wenn ich ne andere Zelle anklicke, funktioniert es.
und zweitens:
Nach dem Klick auf den Button "datensatz ändern" soll das Tablemodel "refresht" werden. Also der SQL-Select soll neu ausgeführt werden. Muss ich das machen, indem ich meine Methode, wo die Daten abgerufen werden, aufrufe, oder geht das anders? Habe was von mymodel.getModel().fireTableDataChanged() gelesen, aber das mag er nicht, bekomme nur die Meldung "...ist undefinied for the Typ TableModel".

Danke schonmal und Gruß
Philipp
 
Original geschrieben von philbo
Hallo...
ich hätte noch zwei Probleme, die ich im Rahmen mit meinem Tablemodel nicht gelöst bekomme.
Erstens:
Ich wähle eine Zeile aus, ändere darin Werte und schreibe die Änderungen auf Buttonklick in meine DB. Das klappt auch soweit, allerdings wird die Zelle, die momentan "aktiv" ist, also wo der Cursor ist nicht korrekt übernommen. Hier werden noch die "alten Inhalte" in die DB geschrieben. Erst wenn ich ne andere Zelle anklicke, funktioniert es.

Das liegt daran, dass der CellEditor noch geöffnet ist. Wir haben das so gelöst, dass wir auf Drücken des Speichern-Buttons den CellEditor schliessen.
myTable ist eine Instanz einer eigenen Klasse, von JTable abgeleitet.

Code:
	private void jbSave_actionPerformed(ActionEvent e)
	{
	   myTable.stopCellEditing(); // etc...
	}

	/**
	 * Beendet das Bearbeiten einer Zelle und übernimmt den aktuellen Wert aus dem 
	 * Editor
	 *
	 */
	public void stopCellEditing()
	{
		if (isEditing())
		{
			TableCellEditor editor = getCellEditor();

			if (editor != null)
			{
				editor.stopCellEditing();
			}
		}
	}


und zweitens:
Nach dem Klick auf den Button "datensatz ändern" soll das Tablemodel "refresht" werden. Also der SQL-Select soll neu ausgeführt werden. Muss ich das machen, indem ich meine Methode, wo die Daten abgerufen werden, aufrufe, oder geht das anders? Habe was von mymodel.getModel().fireTableDataChanged() gelesen, aber das mag er nicht, bekomme nur die Meldung "...ist undefinied for the Typ TableModel".

Danke schonmal und Gruß
Philipp

Also wenn mymodel schon das TableModel ist, ergibt

mymodel.getModel()

keinen Sinn mehr.

mymodel.fireTableDataChanged()

Sollte es dann tun.
 
Also das mit dem fireTableDataChanged() klappt schonmal.
Aber die andere Sache mit dem stopcellediting noch nicht, könntest du mir da vielleicht nochmal helfen?!

Ich habe versucht das für mich umzubauen, ohne eine neue Methode zu erstellen.
Habe es einfach mit in meine Methode geschrieben, die die aktuelle Zeile im tablemodel in die DB schreibt:

Code:
 if (mytable.isEditing()){
         TableCellEditor editor = mytable.getCellEditor();
	if (editor != null)
	{
                          editor.stopCellEditing();
	}
}
tablemodel.fireTableDataChanged();

Müsste doch eigentlich funktionieren, oder? Tut es aber nicht, die aktuelle Zelle wird immer noch im alten Zustand belassen.

Gruß
Philipp
 
Original geschrieben von philbo
Also das mit dem fireTableDataChanged() klappt schonmal.
Aber die andere Sache mit dem stopcellediting noch nicht, könntest du mir da vielleicht nochmal helfen?!

Ich habe versucht das für mich umzubauen, ohne eine neue Methode zu erstellen.
Habe es einfach mit in meine Methode geschrieben, die die aktuelle Zeile im tablemodel in die DB schreibt:

Code:
 if (mytable.isEditing()){
         TableCellEditor editor = mytable.getCellEditor();
	if (editor != null)
	{
                          editor.stopCellEditing();
	}
}
tablemodel.fireTableDataChanged();


Müsste doch eigentlich funktionieren, oder? Tut es aber nicht, die aktuelle Zelle wird immer noch im alten Zustand belassen.

Gruß
Philipp


So auf Anhieb sehe ich da nichts.
Wirst wohl debuggen müssen in das setValueAt() Deines TableModels und schauen, ob das aufgerufen wird, wenn ja, mit welchem Wert. Und/oder getValueAt() für diese Zelle anschauen und beobachten.
 
Guten Morgen...
ich blindfisch hatte es nur an der falschen Stelle (zu spät) eingebaut.
Hatte gestern wohl nicht mehr so ganz den Überblick.

Danke für die Hilfe,
Gruß
Philipp
 
Zurück