tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
487
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Angiii Angiii ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Beiträge
    107
    Hallo Gemeinde ,

    habe folgende Situation:

    Ich habe ein JPanel, auf dem ich weitere Komponenten platziert habe, z.B. 4 JButtons. Nun will ich, dass sich auf jeder Beliebigen Position des JPanels mit Hilfe der rechten Maustaste ein PopUpMenu öffnen lässt.

    Dazu habe ich an das JPanel einen Mouselistener gehängt, welche das Menü öffnet. Das Ganze funktioniert, aber an den Positionen der JButtons reagiert der Listener nicht. Irgendwie auch logisch, die Buttons überdecken ja das JPanel an diesen Stellen.

    Aber muss ich jetzt wirklich für jedes Element auf den JPanel einen extra Mouslistener hinzufügen, nur um auch da mein Menü öffnen zu können?

    Oder gibt es eine Art allgemeinen Mouselistener, der immer reagiert, egal wo ich ihn auslöse?

    Danke!
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    nein, das ist ja auch klar ... ein Listener gilt immer ausschließlich für das Objekt, an den er gebunden wird (hier also Panel und NICHT Button). Es macht vermutlich ja auch nicht viel Sinn, die gleichen Aktionen beim Buttonklick wie beim Klick aufs Panel ablaufen zu lassen.

    Aber Du kannst natürlichen EINEN Listener schreiben und diesen jeweils an alle vier Button hängen (falls dies denn Sinn macht und gewollt ist) !

    Sollen denn bei allen vier Button wirklich die gleichen Aktionen ausgeführt werden

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Man kann auch einen Listener schreiben und dadrin dann ueberpruefen welcher gedrueckt wurde und dann die jeweilige Aktion ausfuehren
     
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von MiMi Beitrag anzeigen
    Man kann auch einen Listener schreiben und dadrin dann ueberpruefen welcher gedrueckt wurde und dann die jeweilige Aktion ausfuehren
    Schon klar, aber das macht den Code - je nachdem, was an Aktionen folgt - ggf. recht unübersichtlich!

    Zudem hatte ich auch eher das Gefühl, dass hier ein pauschaler Listener (also ohne weitere Differenzierung) verwendet wird ... ok, da hätte ich mich sicher klarer ausdrücken können ... aber so ist das halt zwei Tage vor dem Urlaub

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    SE Tutorials.de Gastzugang
    Also soweit ich das weis kann man in einem MouseListener überprüfen welche Maustaste gedrückt wurde. Denn sonst würde der normale MouseListener den Buttons automatisch bekommen auch bei einem rechtsklick reagieren was ja nicht der Fall ist.
    Was du jetzt allerdings machen könntest wäre ein JLayeredPane zu verwenden.
    Dafür musst du aber deine GUI ggf umschreiben weil du deine gesamte GUI auf ein JPanel bekommen musst und dieses dann dem JLayeredPane hinzufügen musst *am besten als UNTERSTES*. Dann erzeugst du ein zweites JPanel , hängst diesem dein MouseListener an in dem dann explizit auf Rechtsklick geprüft werden muss ... setzt dieses mit setOpaque(true) durchsichtig und fügst es als höheres Panel dem JLayeredPane zu. Dadurch wird dein Rechtsklick überall abgefangen ... und der normale Linksklick wird auf die JButtons weitergereicht *wenn meine Theorie stimmt*. Ob das wirklich so funktioniert weis ich jetzt nicht sicher, aber wenn das obere JPanel keine MouseListener hat werden die Klicks definitiv das erste darunter liegende Component weitergereicht die dann einen Listener für die entsprechenden Bounds hat.
     

Ähnliche Themen

  1. Sichtbares PopupMenu
    Von SeppT im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 16.02.09, 15:17
  2. SWT PopUpMenu Problem
    Von Woggly im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 07.08.08, 16:30
  3. transparentes PopupMenu?
    Von yuccapalme im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 18.06.08, 11:06
  4. PopUpMenu in awt
    Von illaX im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 06.04.05, 08:44
  5. Überdeckte Swing Objekte scheinen durch!
    Von ViSPer im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 21.05.04, 16:09