Java/Tutorials/Karteneditor Kapitel 8
In diesen Kapitel behandeln wir, wie wir das Menü aufbauen. Als erstes legen wir uns eine neue Klasse mit den Namen KartenMenü an die wir von JMenuBar ableiten und wie in den Vorrangegangen Klassen werden wir beim Konstruktor wieder unser KartenFenster Klasse übergeben.
public class KartenMenü extends JMenuBar{ KartenFenster fenster; public KartenMenü(KartenFenster kfenster) { fenster=kfenster; } }
Unser Menü, wird die Funktionen für das Anlegen einer neuen Karte, das Laden einer Karte und das Speichern einer Karte beinhalten, darum erstellen wir die Methode neu(), laden() und speichern(). Des Weiteren legen wir ein Menü mit den Namen Datei, dies erfolgt über die Klasse JMenu.
public class KartenMenü extends JMenuBar{ KartenFenster fenster; JMenu datei=new JMenu("Datei"); public KartenMenü(KartenFenster kfenster) { fenster=kfenster; } public void neu() { } public void laden() { } public void speichern() { } }
Nun legen wir unsere Menüpunkte, "Neue Karte", "Karte Laden" und "Karte Speichern" über die Klasse JMenuItem an und zwar als Klassenvariable.
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; } public void neu() { } public void laden() { } public void speichern() { } }
Nun fügen wir unser Menü, die Menüpunkte zu unserer Menübalken hinzu. Wir fügen die Menüpunkte unseren Menü "Datei" über die datei.add()-Methode hinzu. Weiterhin fügen wir wiederum unser Menü mit der Methode add() in unser Menübalken hinzu.
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; datei.add(neu); datei.add(speichern); datei.add(laden); add(datei); } public void neu() { } public void laden() { } public void speichern() { } }
Damit bei betätigen der Menüs, auch die Methoden neu(), laden() und speichern() aufgerufen werden fügen wir jeden JMenuItem ein 'ActionListener über die Methode addActionListener hinzu und rufen in dieser Klasseüber die Methode ActionPerformed die wir Implementieren müssen, die jeweilige Methode auf.
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() { } public void laden() { } public void speichern() { } }
So, damit hätten wir unser Menü, nun wollen wir aber, das es in unser Fenster angezeigt wird. Daher legen wir eine Klassen Variable von Typ KartenMenü an und Initialisieren sie genau so wie die vorrangegangen Klassen und zwar übergeben wir wieder das this Objekt. Nun fügen wir unser Menü über die Methode add() unser Fenster hinzu und zwar ganz oben, wo ein Menü nunmal hingehört und zwar geben wir als 2. Parameter BorderLayout.NORTH.
public class KartenFenster extends JFrame{ Karte aktuelleKarte; TilePalette palette; KartenAnsicht ansicht; KartenMenü kartenMenü; public KartenFenster() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.requestFocus(); int karte[][]=new int[100][100]; String name="Unser erste Karte"; String tilesetDateiname="Tileset.png"; aktuelleKarte=new Karte(karte, tilesetDateiname, name); palette=new TilePalette(this); //Initialisere KartenAnsicht ansicht=new KartenAnsicht(this); //Initialisere KartenMenü kartenMenü=new KartenMenü(this); setLayout(new BorderLayout()); add(kartenMenü, BorderLayout.NORTH); add(palette, BorderLayout.WEST); add(ansicht.scroll , BorderLayout.CENTER); //größe des Fensters setzen setSize(1024, 768); //Setzen eines Fenstertitels setTitle("Karteneditor"); } }
Und wie immer zum vergleich: