Java/Tutorials/Entwicklung eines einfachen Karteneditors III/Kapitel 4
Für eine Passmap, reicht ein einfaches Fenster aus, wo wir die im vorrigen Kapitel geschrieben Klasse anzeigen lassen. Ein Okay oder Abbruch Button sind nicht nötig.
Daher öffnen wir nun die Klasse KartenMenü und fügen folgende dinge hinzu:
Als Klassenvariablen:
JMenu ḱarte=new JMenu("Karte"); JMenuItem passierbarkeit=new JMenuItem("Passierbarkeit Einstellen");
Am Ende des Konstruktros fügt man anschließend folgendes hinzu:
passierbarkeit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { passiserbarkeit(); } }); karte.add(passierbarkeit); add(karte);
Wir weisen als erstes unseren Menüeintrag einen ActionListener hinzu, wo wir die Methode 'passierbarkeit() aufrufen. Anschließend fügen wir unseren Menüeintrag dem Menü hinzu.
Anschließend erstellen wir die Methode passierbarkeit.
public void passiserbarkeit() { }
In dieser Erzeugen wir mittels JFrame ein Fenster. Wo wir dann unser PassmapPalette-Klasse aufrufen. Die Methode pack von JFrame bewirkt, das das Fenster die richtige größe bekommt.
public void passiserbarkeit() { JFrame frame=new JFrame("Passierbarkeit"); frame.add(new PassmapPalette(fenster)); frame.pack(); frame.setVisible(true); }
Die Vollständige Klasse sieht dan so aus:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; 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"); JMenu karte=new JMenu("Karte"); JMenuItem passierbarkeit=new JMenuItem("Passierbarkeit Einstellen"); 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); passierbarkeit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { passiserbarkeit(); } }); karte.add(passierbarkeit); add(karte); } public void passiserbarkeit() { JFrame frame=new JFrame("Passierbarkeit"); frame.add(new PassmapPalette(fenster)); frame.pack(); frame.setVisible(true); } 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(); int passmap[]=(int[]) lese.readObject();//Neu fenster.aktuelleKarte=new Karte(karte,dateiname, name); fenster.aktuelleKarte.passmap=passmap;//Neu 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.writeObject(fenster.aktuelleKarte.passmap); schreibe.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }