Hi,
ich wollte meine 2 jTables serialisieren und speichern, da sich auch z.B. Spalten-/Zeilenbreite ändern, muss ich neben dem DefaultTableModel auch das TableColumnModel serialisieren, nur damit keine Fragen auftreten.
Wenn ich den unten aufgeführten Quelltext ausführe funktioniert alles wunderbar, kann auch alles wieder deserialisieren ohne Fehler. Doch wenn ich zum 2. mal speichern will (ohne etwas gemacht zu haben) kommt die Fehlermeldung:
Wie kann ichs jetzt verhindern, dass der diesen WindowsTableHeaderUI-Dünsch mit serialisiert, brauch ich doch bestimmt sowieso nicht..
Quelltext:
Vielen Dank im Voraus, wottpal
ich wollte meine 2 jTables serialisieren und speichern, da sich auch z.B. Spalten-/Zeilenbreite ändern, muss ich neben dem DefaultTableModel auch das TableColumnModel serialisieren, nur damit keine Fragen auftreten.
Wenn ich den unten aufgeführten Quelltext ausführe funktioniert alles wunderbar, kann auch alles wieder deserialisieren ohne Fehler. Doch wenn ich zum 2. mal speichern will (ohne etwas gemacht zu haben) kommt die Fehlermeldung:
Java:
java.io.NotSerializableEception: com.sun.java.swing.plaf.windows.WindowsTableHeaderUI
Quelltext:
Java:
public void save() throws IOException {
if (jTable1.getCellEditor() != null && !jTable1.getCellEditor().stopCellEditing()) {
jTable1.getCellEditor().cancelCellEditing();
}
if (jTable2.getCellEditor() != null && !jTable2.getCellEditor().stopCellEditing()) {
jTable2.getCellEditor().cancelCellEditing();
}
jTable1.requestFocusInWindow();
jTable2.requestFocusInWindow();
try {
String filename = "filename";
if (jFileChooser1.showSaveDialog(jMenu1) == JFileChooser.APPROVE_OPTION) {
filename = jFileChooser1.getSelectedFile().toString();
if (!filename.endsWith(".turing")) {
filename += ".turing";
}
FileOutputStream file = new FileOutputStream(filename);
ObjectOutputStream o = new ObjectOutputStream(file);
// jTable1
DefaultTableModel model1 = cloneModelWithoutListeners((DefaultTableModel) jTable1.getModel());
TableColumnModel cModel1 = jTable1.getColumnModel();
o.writeObject(model1);
o.writeObject(cModel1);
// jTable2
DefaultTableModel model2 = cloneModelWithoutListeners((DefaultTableModel) jTable2.getModel());
TableColumnModel cModel2 = jTable2.getColumnModel();
o.writeObject(model2);
o.writeObject(cModel2);
o.close();
}
} catch (IOException e) {
System.err.println(e);
}
}
// Entfernt unötige Listener, die nicht mit serialisiert werden müssen
public DefaultTableModel cloneModelWithoutListeners(
DefaultTableModel orgModel) {
final Vector<?> clonedData = (Vector<?>) orgModel.getDataVector().clone();
final int columnCount = orgModel.getColumnCount();
final Vector<String> columnNames = new Vector<String>(columnCount);
for (int i = 0; i < columnCount; i++) {
columnNames.add(orgModel.getColumnName(i));
}
return new DefaultTableModel(clonedData, columnNames);
}
Vielen Dank im Voraus, wottpal