JTable: Werte speichern ohne "Enter"

Dinosaurus

Grünschnabel
Hallo, ich habe folgendes Problem:

in einer Tablle (JTable) kann der Benutzer Text eingeben. Wenn er die Eingabe mit Enter oder Tab abschliesst ist alles ok. Wenn er das aber vergisst und auf irgend einen Knopf drückt, um im Programm weiter zu fahren, dann steht in der Tabellenzelle seine Eingabe, aber bei der Weiterverarbeitung (getValueAt()) wird der alte Zelleninhalt verwendet und z.B. gespeichert, ohne dass er das merkt.

Gibt es eine Möglichkeit, den Zelleninhalt "von aussen" zu aktualisieren? Also zB, wenn der Benutzer "Speichern" drückt, zuerst die Tabelle aktualisieren, und dann erst speichern.

Vielen Dank für alle Hilfe!
 
Das müsste irgendwie mit stopCellEditing aus dem TableCellEditor funktionieren. Müsste ich nachschlagen, auswändig weiss ich das nicht mehr. Aber wir haben das gleiche Problem auch mal gehabt und damit gelöst.
 
wenn ich die Zeilen:


TableCellEditor ed = jTable.getCellEditor(0,0);
System.out.println("ed: "+ed); // zur Prüfung, ob der CellEditor nicht null ist
if (ed!=null) ed.stopCellEditing(); // ohne diese Zeile keinen Absturz // (aber natürlich auch keine Wirkung)


bekomme ich folgende NullPointerException

tabbed pane stateChanged()
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JTable$GenericEditor.stopCellEditing(JTable.java:3669)
at TextTest$1.stateChanged(TextTest.java:108)
at javax.swing.JTabbedPane.fireStateChanged(JTabbedPane.java:290)
at javax.swing.JTabbedPane$ModelListener.stateChanged(JTabbedPane.java:222)
at javax.swing.DefaultSingleSelectionModel.fireStateChanged(DefaultSingleSelectionModel.java:116)
at javax.swing.DefaultSingleSelectionModel.setSelectedIndex(DefaultSingleSelectionModel.java:50)
at javax.swing.JTabbedPane.setSelectedIndexImpl(JTabbedPane.java:478)
at javax.swing.JTabbedPane.setSelectedIndex(JTabbedPane.java:464)
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mousePressed(BasicTabbedPaneUI.java:3237)


usw,usw

Da die Exception nicht mehr in meinem Code geworfen wird, weiss ich nicht mehr weiter.

Was nun?
Danke!
 
Also wir haben das mal so umgesetzt:
Code:
TableCellEditor tce = null;
if (jTable.isEditing()) {
  tce = jTable.getCellEditor();
}
if (tce != null) {
  tce.stopCellEditing();
}
 
Zurück