JPopupMenu
Das Kontextmenü, auch Popup-Menü genannt, ist das Menü, welche sich nach einem Klick mit der rechten Maustaste öffnet. Dieses Menü wird in Java über die Klasse javax.swing.JPopupMenu realisiert. JPopupMenu ist wie JMenuBar ein Container für die Menü-Elemente und kann auch dieselben Objekte aufnehmen.
Die Klasse JPopupMenu besitzt neben dem Standardkonstruktor noch einen weiteren, der als Parameter den Titel für das Kontextmenü entgegennimmt.
Das Beispiel aus den vorangegenen Kapiteln erweitern wir jetzt um ein Kontextmenü. Da wir allerdings noch kein Event-Handling kennengelernt haben, erstellen wir hier zur Veranschaulichung lediglich ein statisches Kontextmenü. Von jedem Menüeintrag erzeugen wir nun ein zweites Objekt, welches wir dem JPopupMenu hinzufügen.
// Import-Anweisungen import java.awt.Color; import javax.swing.JCheckBoxMenuItem; import javax.swing.JDialog; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; import javax.swing.JSeparator; import javax.swing.border.Border; import javax.swing.border.LineBorder; public class PopupMenuBeispiel { // main-Methode public static void main(String[] args) { /* Erzeugung eines neuen Dialoges */ JDialog meinJDialog = new JDialog(); meinJDialog.setTitle("JMenuBar für unser Java Tutorial Beispiel."); // Wir setzen die Breite auf 450 und die Höhe auf 300 Pixel meinJDialog.setSize(450,300); // Zur Veranschaulichung erstellen wir hier eine Border Border bo = new LineBorder(Color.yellow); // Erstellung einer Menüleiste JMenuBar bar = new JMenuBar(); // Wir setzen unsere Umrandung für unsere JMenuBar bar.setBorder(bo); // Erzeugung eines Objektes der Klasse JMenu JMenu menu = new JMenu("Ich bin ein JMenu"); // Erzeugung eines Objektes der Klasse JMenuItem JMenuItem item = new JMenuItem("Ich bin das JMenuItem"); JMenuItem item2 = new JMenuItem("JMenuItem innerhalb eines JPopups"); // Wir fügen das JMenuItem unserem JMenu hinzu menu.add(item); // Erzeugung eines Objektes der Klasse JSeparator JSeparator sep = new JSeparator(); JSeparator sep2 = new JSeparator(); // JSeparator wird unserem JMenu hinzugefügt menu.add(sep); // Erzeugung eines Objektes der Klasse JCheckBoxMenuItem JCheckBoxMenuItem checkBoxItem = new JCheckBoxMenuItem ("Ich bin das JCheckBoxMenuItem"); JCheckBoxMenuItem checkBoxItem2 = new JCheckBoxMenuItem ("JCheckBoxMenuItem innerhalb eines JPopups"); // JCheckBoxMenuItem wird unserem JMenu hinzugefügt menu.add(checkBoxItem); // Erzeugung eines Objektes der Klasse JRadioButtonMenuItem JRadioButtonMenuItem radioButtonItem = new JRadioButtonMenuItem ("Ich bin ein JRadionButtonMenuItem",true); JRadioButtonMenuItem radioButtonItem2 = new JRadioButtonMenuItem ("JRadionButtonMenuItem innerhalb eines JPopups",true); // JRadioButtonMenuItem wird unserem JMenu hinzugefügt menu.add(radioButtonItem); // Menü wird der Menüleiste hinzugefügt bar.add(menu); // Erzeugung eines JPopupMenu-Objektes JPopupMenu pop = new JPopupMenu(); // Wir setzen die Position unseres Kontextmenüs // auf die Koordinaten X = 100 und Y =100 pop.setLocation(100, 100); // Wir fügen unsere Menüeinträge unserem Kontextmenü hinzu pop.add(item2); pop.add(sep2); pop.add(checkBoxItem2); pop.add(radioButtonItem2); // Menüleiste wird für den Dialog gesetzt meinJDialog.setJMenuBar(bar); // Wir lassen unseren Dialog anzeigen meinJDialog.setVisible(true); // Wir lassen unser JPopupMenu anzeigen pop.setVisible(true); } }
Nach Ausführen des obigen Quellcodes, erhalten Sie (mit geöffnetem JMenu) folgendes Bild:
Da wir hier lediglich ein statisches Popup-Menü implementiert haben, bleibt es auch dann bestehen, wenn wir das JMenu aufgeklappt haben. Ein dynamisches Popup-Menü werden wir implementieren, wenn wir das Thema EventHandling behandeln.