Java/Tutorials/Entwicklung eines einfachen Karteneditors IV/Kapitel 3
In diesen Abschnitt fügen wir nun ein Popup in unserer KartenAnsicht-Klasse ein, damit wir Events Erstellen, Löschen oder bearbeiten können. Da diese Klasse doch schon recht groß ist, werden nur auszüge aus Methoden usw. dargestellt nicht die ganze Klasse. Zu aller erst fügen wir der Klasse KartenAnsicht als Klassenvariable ein JPopupMenu hinzu. Danach fügen wir 3. JMenuItem hinzu, die später für das löschen,bearbeiten und erstellen von Events verantworlich sein sollen. Auch fügen wir eine Klassenvariable eventPosition hinzu, in der wir die Event Position speichern werden, damit wir sie später verarbeiten können. Danach fügen wir das Interface ActionListener der Klasse hinzu, wo wir die Methode actionPerform hinzufügen.
public class KartenAnsicht extends JPanel implements ActionListener{ ... JPopupMenu popup=new JPopupMenu(); JMenuItem erstellen = new JMenuItem("Event-Erstellen"); JMenuItem löschen = new JMenuItem("Event-Löschen"); JMenuItem bearbeiten = new JMenuItem("Event-Bearbeiten"); Point eventPosition = new Point(); ... }
Nun fügen wir unseren 3 JMenuItem mittels addActionListener die Klasse selbst hinzu. Weiterhin werden unsere 3 Menüpunkte dem JPopupMenu hinzugefügt.
Als nächstes bearbeiten wir unsere Anonyme-Klasse in der aufgerunfenen addMouseListener-Methode. Hier fügen wir eine Abfrage hinzu, welcher Maus-Button gedrückt wurde. Wenn der Linke Maus-Button gedrückt wurde soll es ein Tile zeichnen, also Tile in der Karte ändern und bei rechts Klick soll er uns ein Menü aufklappen wo wir Events hinzufügen,löschen oder Bearbeiten können. Dies ist relativ einfach. wir fragen über getButton() ab, welche Maustaste gedrückt wurde und vergleichen diese mit der rechtren Maustaste, dies währe BUTTON3. Nun weisen wir zu erst eine neue Event Position zu, da wir ansonsten nicht an den Punkt ran kommen der angeklickt wurde.
public class KartenAnsicht extends JPanel implements ActionListener{ ... public KartenAnsicht(KartenFenster kfenster) { ... this.erstellen.addActionListener(this); this.löschen.addActionListener(this); this.bearbeiten.addActionListener(this); popup.add(erstellen); popup.add(löschen); popup.add(bearbeiten); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) { eventPosition = e.getPoint(); popup.show(e.getComponent(), e.getX()/32, e.getY()/32); // Es wird durch die Tilgröße 32 geteilt, damit wir die Position auf der Karte bekommen. } else { zeichneTile(e.getX(), e.getY()); } } }); ... } ... } Kommen wir nun zu den Funktionen der PopupMenü einträge. Zu erst das erstellen von Karten, mittels getSource() fragen wir ab welcher Menü eintrag geklickt wurde und vergleichen ihn mit der Klassenvariable '''erstellen'''. Falls die Bedingung war ist, soll er uns ein EventDialog anzeigen wo wir ein Event hinzufügen können. public class KartenAnsicht extends JPanel implements ActionListener{ ... public void actionPerformed(ActionEvent e) { if(e.getSource() == this.erstellen) { EventDialog dialog = new EventDialog("",0, new Point(eventPosition.x, eventPosition.y), fenster); } } ... }