From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100198.html | 266 +++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100198.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100198.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100198.html b/Master/Reference Architectures and Patterns/hjp5/html/k100198.html new file mode 100644 index 0000000..621de8b --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100198.html @@ -0,0 +1,266 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 30 - Menüs +
+
+ + + + +

30.6 Kontextmenüs +

+
+ +
+ +

+Ein wichtiger Bestandteil grafischer Oberflächen, der in den +letzten Jahren verstärkt in die Programme Einzug gehalten hat, +sind die Kontext- oder Popup-Menüs. Sie liefern +auf rechten Mausklick ein Menü mit den wichtigsten Aktionen, +die innerhalb der ausgewählten Komponente zur Verfügung +stehen. Auf diese Weise steht eine Vielzahl von Funktionen dort zur +Verfügung, wo sie benötigt wird, anstatt umständlich +aus dem Hauptmenü des Programms ausgewählt oder per Kommando +eingegeben werden zu müssen. + +

+Auch im JDK 1.1 gibt es Kontextmenüs, die so funktionieren. Sie +werden durch die Klasse PopupMenu, +die aus Menu +abgeleitet ist, implementiert. PopupMenu +ist genauso zu bedienen wie Menu +und wird daher vor allem mittels geeigneter Aufrufe von add +mit Menüeinträgen bestückt. Diesen kann ein ActionListener +zugeordnet werden, der bei Auslösen des Menüpunkts aufgerufen +wird. Gegenüber der Klasse Menu +besitzt PopupMenu +eine zusätzliche Methode show, +mit der das Kontextmenü angezeigt wird: + +

+

+ + + + + +
+ +
+public void show(Component origin, int x, int y)
+
+
+
+java.awt.PopupMenu
+ +

+Der erste Parameter origin ist +die Komponente, an die das Kontextmenü gebunden wird. Diese Komponente +hat lediglich administrative Aufgaben, spielt aber beim Aufruf des +Kontextmenüs keine Rolle. Die Argumente x +und y geben die Position des +Kontextmenüs relativ zum Ursprung von origin +an. + +

+Um ein Kontextmenü aufzurufen, sind mehrere Dinge zu tun. Zunächst +muss das instanzierte Kontextmenü durch Aufruf von add +an die Komponente gebunden werden, die auf Mausereignisse für +den Aufruf reagieren soll. Dies kann beispielsweise das Fenster sein, +in dem die Komponente untergebracht ist, oder die Komponente selbst. +Anschließend muss in der Komponente durch Aufruf von enableEvents +die Behandlung von Maus-Events freigeschaltet werden. Drittens muss +die Methode processMouseEvent +überlagert werden, und es muss bei jedem Mausereignis mit isPopupTrigger +abgefragt werden, ob es sich um das Ereignis zum Aufruf des Kontextmenüs +handelte. In diesem Fall kann das Kontextmenü durch Aufruf von +show +angezeigt werden. +

+ + + + + + + + + +
+ +

+Kontextmenüs sind von Plattform zu Plattform leicht unterschiedlich +implementiert, und insbesondere die Art des Aufrufs unterscheidet +sich voneinander (zweite oder dritte Maustaste, Aufruf beim Drücken +oder Loslassen usw.). Um das Look-and-Feel des jeweiligen Systems +beizubehalten, sollte processMouseEvent +überlagert werden, um bei jeder Art von Mausereignis feststellen +zu können, ob der PopupMenu-Trigger ausgelöst wurde. Der +einfache Aufruf von show +aus einem mousePressed- +oder mouseReleased-Ereignis +heraus ist nicht portabel und sollte daher vermieden werden.

+ + + + +
 Hinweis 
+
+ +

+Das folgende Beispiel zeigt ein Programm mit einem Kontextmenü, +das die Punkte »Rückgängig«, »Ausschneiden«, +»Kopieren« und »Einfügen« enthält. Das +Kontextmenü wird an das Hauptfenster gehängt und von Mausereignissen +dieses Fensters aufgerufen. Beim Auslösen einer Option des Kontextmenüs +wird eine entsprechende Meldung auf die Systemkonsole geschrieben. + + +

+ + + + + +
+ +
+001 /* Listing3006.java */
+002 
+003 import java.awt.*;
+004 import java.awt.event.*;
+005 
+006 class MyPopupMenu
+007 extends PopupMenu
+008 {
+009   public MyPopupMenu(ActionListener listener)
+010   {
+011     MenuItem mi;
+012 
+013     mi = new MenuItem("Rueckgaengig");
+014     mi.addActionListener(listener);
+015     add(mi);
+016 
+017     addSeparator();
+018 
+019     mi = new MenuItem("Ausschneiden");
+020     mi.addActionListener(listener);
+021     add(mi);
+022 
+023     mi = new MenuItem("Kopieren");
+024     mi.addActionListener(listener);
+025     add(mi);
+026 
+027     mi = new MenuItem("Einfuegen");
+028     mi.addActionListener(listener);
+029     add(mi);
+030   }
+031 }
+032 
+033 public class Listing3006
+034 extends Frame
+035 implements ActionListener
+036 {
+037   MyPopupMenu popup;
+038 
+039   public static void main(String[] args)
+040   {
+041     Listing3006 wnd = new Listing3006();
+042   }
+043 
+044   public Listing3006()
+045   {
+046     super("Kontextmenü");
+047     setLocation(100,100);
+048     setSize(300,200);
+049     setVisible(true);
+050     addWindowListener(new WindowClosingAdapter(true));
+051     //Kontextmenü erzeugen und aktivieren
+052     popup = new MyPopupMenu(this);
+053     add(popup);
+054     enableEvents(AWTEvent.MOUSE_EVENT_MASK);
+055   }
+056 
+057   public void processMouseEvent(MouseEvent event)
+058   {
+059     if (event.isPopupTrigger()) {
+060       popup.show(
+061         event.getComponent(),
+062         event.getX(),
+063         event.getY()
+064       );
+065     }
+066     super.processMouseEvent(event);
+067   }
+068 
+069   public void actionPerformed(ActionEvent event)
+070   {
+071     System.out.println(event.getActionCommand());
+072   }
+073 }
+
+
+Listing3006.java
+ +Listing 30.6: Einbinden eines Kontextmenüs im AWT

+ +

+Abbildung 30.4 zeigt +den Aufruf des Kontextmenüs: +

+ + +

+ +

+Abbildung 30.4: Aufruf eines Kontextmenüs

+
+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3