Java/Tutorials/Karteneditor Kapitel 11
In diesen Kapitel behandeln wir, wie wir die Karte wieder laden können. Wir werden wieder die Serialize-Schnittstelle von Java verwenden. Das gegenstück zum ObjectOutputStream ist der ObjectInputStream. Im Grunde genommen müssen wir nur das Output in jeder Klasse zu Input ändern. Zum lesen der Objekte also den Inhalt der Datei gibt es dann die Methode readObject(), damit lesen wir die Objecte aus der Datei herraus, dabei müssen wir nur darauf achten, das wir die Objekte in der richtigen Reihenfolge herrauslesen. Da wir als erstes unser Integer-Array ihn die Datei geschrieben haben, müssen wir es als erstes wieder herrauslesen. Da readObject() ein Wert von Typ Object zurück gibt müssen wir vorher noch diesen Inhalt von Typ Object in eine Interger-Array umwandeln dies erfolgt durch Casting, also schreiben wir in Klammern dafor was für ein Typ es ist. In unseren Fall ein (int[][]) und schon haben wir die Karte. Der Datename des Tileset und der Name der Karte lesen wir ebenfalls mit dieser Methode aus. Anschließend führen wie die selben Methoden aus, die wir zuvor in der KartenDialog-Klasse geschrieben haben.
public class KartenMenü extends JMenuBar{ KartenFenster fenster; JMenu datei=new JMenu("Datei"); JMenuItem neu=new JMenuItem("Neue Karte"); JMenuItem speichern=new JMenuItem("Karte Speichern"); JMenuItem laden=new JMenuItem("Karte Laden"); public KartenMenü(KartenFenster kfenster) { fenster=kfenster; neu.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { neu(); } }); laden.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { laden(); } }); speichern.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { speichern(); } }); datei.add(neu); datei.add(speichern); datei.add(laden); add(datei); } public void neu() { new KartenDialog(fenster); } public void laden() { try { JFileChooser speicherDialog=new JFileChooser(); speicherDialog.showOpenDialog(fenster); FileInputStream datei=new FileInputStream(speicherDialog.getSelectedFile()); BufferedInputStream buf=new BufferedInputStream(datei); ObjectInputStream lese = new ObjectInputStream(buf); int[][]karte=(int[][]) lese.readObject(); String name=(String) lese.readObject(); String dateiname=(String) lese.readObject(); fenster.aktuelleKarte=new Karte(karte,dateiname, name); lese.close(); fenster.ansicht.changeKarte(); fenster.palette.repaint(); fenster.ansicht.repaint(); fenster.ansicht.scroll.repaint(); fenster.repaint(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void speichern() { try { JFileChooser speicherDialog=new JFileChooser(); speicherDialog.showSaveDialog(fenster); FileOutputStream datei=new FileOutputStream(speicherDialog.getSelectedFile()); BufferedOutputStream buf=new BufferedOutputStream(datei); ObjectOutputStream schreibe = new ObjectOutputStream(buf); schreibe.writeObject(fenster.aktuelleKarte.karte); schreibe.writeObject(fenster.aktuelleKarte.kartenName); schreibe.writeObject(fenster.aktuelleKarte.tilesetDateiname); schreibe.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }