Hallo, ich möchte gerne, dass was ich programmiert habe in eine XML-Datei speichern. Dazu habe ich zwei Buttons (Save und Load). das Speichern klappt auch soweit ganz gut, aber ich bekomme es nicht hin diese Datei dann zu laden, weil sie mir nicht angezeigt wird. Ich hoffe ihr habt einen Tipp. Vielen Dank schon mal
Java:
package view;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import model.*;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.stage.FileChooser;
import viewmodel.MainViewModel;
public class FilePane extends GridPane {
final Button btnSave = new Button ("Save");
final Button btnLoad = new Button ("Load");
final FileChooser fileChooser = new FileChooser ();
private EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>() {
public void handle (ActionEvent me) {
if(me.getSource()==btnLoad) btnLoadHandle(me);
else if(me.getSource()==btnSave) btnSaveHandle(me);
}
};
public FilePane() {
this.setPadding(new Insets(20, 10,10, 10));
this.setVgap(15);
this.setHgap(20);
// this.setGridLinesVisible(true);
this.add(btnLoad, 22, 0);
this.add(btnSave, 32, 0);
btnSave.addEventFilter(ActionEvent.ACTION, handler);
btnLoad.addEventFilter(ActionEvent.ACTION, handler);
// btnSave.setOnAction(e -> {
// File selectedFile = fileChooser.showOpenDialog(null);
// });
fileChooser.getExtensionFilters().addAll( new FileChooser.ExtensionFilter("Serialize", "*.ser")
,new FileChooser.ExtensionFilter("XMLEncoder Files", "*.xml")
,new FileChooser.ExtensionFilter("XMLDOM Files", "*.xml2") );
fileChooser.setInitialDirectory(new File("./"));
}
@SuppressWarnings("unchecked")
public void btnLoadHandle(Event e) {
Figure f = null;
File selectedFile = fileChooser.showOpenDialog(null); // es ruft das Fenster auf, aber ich sehe dort keine Dateien sondern nur Ordner
try {
java.beans.XMLDecoder in = new java.beans.XMLDecoder(new FileInputStream(selectedFile));
// f = (Figure) readXMLDecoder(in);
Tupel<Double> t = null;
TupelColor tc = null;
f = (Figure) in.readObject();
t = (Tupel<Double>) in.readObject();
f.setPosition(t.x, t.y);
t = (Tupel<Double>) in.readObject();
f.setSize(t.x, t.y);
tc = (TupelColor) in.readObject();
f.setColors(tc.x, tc.y);
in.close();
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
public void btnSaveHandle (Event e) {
File selectedFile = fileChooser.showSaveDialog(null);
MainViewModel vm = new MainViewModel();
Drawing d = vm.getDrawing();
// Write Encoder
try {
java.beans.XMLEncoder out = new java.beans.XMLEncoder(new FileOutputStream("Test"));
writeXMLEncoder(d, out);
out.flush();
out.close();
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
private void writeXMLEncoder(Drawing d, XMLEncoder out) {
// TODO Auto-generated method stub
out.writeObject(d);
Figure f;
for (int i =0; i < d.getShapes().size(); i++) {
out.writeObject(d.getShapes().get(i));
f = (Figure)d.getShapes().get(i);
out.writeObject(f.getPosition());
out.writeObject(f.getSize());
out.writeObject(f.getColors());
}
}
}