|
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 geeignter 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 muß 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 muß in der Komponente durch Aufruf von enableEvents die Behandlung von Maus-Events freigeschaltet werden. Drittens muß die Methode processMouseEvent überlagert werden, und es muß 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 & 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. |
![]() |
|
![]() |
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.
|
![]() |
|
![]() |
Abbildung 20.4 zeigt den Aufruf des Kontextmenüs:
Abbildung 20.4: Aufruf eines Kontextmenüs
|
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com |