tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
1071
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von starbuck86
    starbuck86 starbuck86 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    54
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
        
        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!");
            }
        }
     

  2. #2
    Avatar von matdacat
    matdacat matdacat ist offline Mitglied Platin
    Registriert seit
    Aug 2004
    Beiträge
    672
    Du darfst den ActionListener natürlich nur einmal (z.B. beim Programmstart) hinzufügen, nicht bei jedem Aufruf des Menüs
     

  3. #3
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  4. #4
    Avatar von starbuck86
    starbuck86 starbuck86 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    54
    Ach du heiliger BimmBamm.

    Ja that`s it!
    Danke Leutz, manchmal sieht man vor lauter Bäumen den Wald nicht mehr.
     

Ähnliche Themen

  1. Layout - ändern (kontext menü
    Von digital art im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 22.12.09, 16:07
  2. eigenes Kontext-Menü...
    Von CHaoSlayeR im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 18.12.05, 06:32
  3. Kontext(Arbeitsflächen)-menü anpassen
    Von asmodis! im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 27.01.04, 23:09