Java/Tutorials/Karteneditor Kapitel 11

Aus Scientia
Version vom 15. März 2011, 14:31 Uhr von Alexis Hiemis (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Entwicklung eines einfachen Karteneditors Schwierigkeitsgrad Stern.pngSchwierigkeitsgrad Stern.pngSchwierigkeitsgrad Stern.png
Autor
Thematik Java
Vorraussetzungen Programme:

Fähigkeiten:

Andere Teile

Material

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 dem Inhalt der Datei, gibt es dann die Methode readObject(). Damit lesen wir die Objekte aus der Datei heraus. Dabei müssen wir nur darauf achten, dass wir die Objekte in der richtigen Reihenfolge herauslesen. Da wir als erstes unseren Integer-Array in die Datei geschrieben haben, müssen wir ihn als erstes wieder herauslesen. Da readObject() ein Wert vom Typ Object zurück gibt, müssen wir vorher noch diesen Inhalt von Typ Object in einen Integer-Array umwandeln. Dies erfolgt durch Casting. Wir schreiben in Klammern davor, was für ein Typ es ist. In unserem Fall ein (int[][]). Schon haben wir die Karte. Den Dateinamen des Tilesets und den Namen der Karte lesen wir ebenfalls mit dieser Methode aus. Anschließend führen wir die selben Methoden aus, die wir zuvor in die 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();
		}
	}
}