Kontext-/Rechtsklick-Menü

starbuck86

Mitglied
Hallo.

In meinem Kontextmenü habe ich diverse Buttons angeordnet, auf welche eine Aktion folgt. Zur Zeit ist diese Aktion noch ein System.out.println().
Es sieht wie folgt aus:
Java:
frame.addMouseListener(new MouseAdapter() {
	        public void mouseReleased(MouseEvent evt) {
	            if (evt.isPopupTrigger()) {
	                showMenu(evt);
	            }
	        }
	    });

...

private JMenuItem cmap = new JMenuItem("Colormap");
	private JMenuItem rmon = new JMenuItem("Restart Secmon");
	private JMenuItem fprio = new JMenuItem("File Priorities");
	
	public void showMenu(MouseEvent evt){
		JPopupMenu menu = new JPopupMenu();
		rmon.addActionListener(this);
		menu.add(rmon);
		cmap.addActionListener(this);
		menu.add(cmap);
		fprio.addActionListener(this);
		menu.add(fprio);
		menu.show(frame, evt.getX(), evt.getY()); 
	}

Jetzt ist aber das Problem, dass er die Aktion, die im ActionListener hinterlegt ist (System.out....) so oft ausführt, wie seit Programmstart geklickt wurde. Also beim ersten Rechtsklick führt er die Aktion einmal aus. Beim zweiten Rechtsklick führt er sie 2 mal aus, beim dritten Rechtsklick führt er sie 3mal aus, und so weiter...

Weiss jemand an was das liegen kann?

Danke && Gruß
Thomas

PS: Mein ActionListener:
Java:
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == cmap) {
			System.out.println("colormap wurde soeben geoeffnet!");
		} else if (e.getSource() == rmon) {
			System.out.println("Secmon wird neu gestartet!");
		} else if (e.getSource() == fprio) {
			System.out.println("Prioritätenliste geöffnet!");
		}
	}
 
Du darfst den ActionListener natürlich nur einmal (z.B. beim Programmstart) hinzufügen, nicht bei jedem Aufruf des Menüs :)
 
Hallo,

das liegt daran, dass du jedesmal den ActionListener immer wieder hinzufügst. Das heißt, beim ersten mal hat der Button einen ActionListener. Beim zweiten Klick ist der gleiche ActionListener zweimal vorhanden usw. Deshalb wird der die actionPerformed auch öfter ausgeführt. Es reicht, wenn du die Listener einmal registrierst und auch das PopupMenu einmal erzeugst und immer wieder anzeigst.

MFG

Sascha
 

Neue Beiträge

Zurück