Swing Listener bei JPopupMenu

Kaffeebohn

Bekanntes Mitglied
Hi zusammen,

ich habe ein JPanel mit diversen Listener versehen (MouseListener, MouseMotionListener, MouseWheelListener). Beim Drücken der Rechten Maustaste öffnet sich innerhalb der mouseReleased(MouseEvent e)-Methode ein JPopupMenu wie folgt:

Java:
contentMenuBox.show(parent, e.getX(), e.getY());

Das Menü wird nun auch angezeigt und funktioniert einwandfrei. Allerdings habe ich ein Problem, wenn bei der Bedienung des Popup-Menüs in das dahinterliegende JPanel geklickt wird (also neben das Popup-Menü), um das Popup-Menü zu schließen. In diesem Fall wird, obwohl mit der linken Maustaste direkt in das JPanel geklickt wird, kein mousePressed-Event ausgelöst.

Ich habe versucht, das ganze mit einem PopupMenuListener abzufangen. Ich kann zwar am richtigen Moment einhaken, würde es allerdings vorziehen, wenn die ganz normale mousePressed()-Methode aufgerufen werden würde.

Kann mir jemand sagen ob ich einen Fehler gemacht habe oder wie ich erreich kann, dass mousePressed ausgelöst wird?

Danke und liebe Grüße!
 

KrokoDiehl

Top Contributor
Hallo.
Hat es einen besonderen Grund, dass du das Popup manuell anzeigen lässt? Ansonsten würde ich über
Java:
meinPanel.setComponentPopupMenu(meinPopup);
// oder so ähnlich
das Popup setzen. Soweit ist weiß ist dann die übrige Handhabe (Klicks außerhalb und so) automatisch geregelt.
 

Kaffeebohn

Bekanntes Mitglied
Der Grund hierfür ist, dass das angezeigte PopupMenü je nach Klickbereich variieren kann. Da man das Problem ja auch anders lösen kann, habe ich es mal so wie du beschrieben hast versucht. Das Menü wird zwar angezeigt, das Problem, dass der darunterliegende Listener auf mousePressed() nicht reagiert, wenn man das Menü schließt, besteht allerdings weiterhin.

Liebe Grüße
 

KrokoDiehl

Top Contributor
Puh ok.
Ich schreibe aus grober Erinnerung, ich denke das steht in der API zu JFrame oder JWindow. Jedenfalls ist es glaube ich so, dass das Popupmenü auf der GlassPane angezeigt wird und daher bekommt die darunterliegende Komponente keine Klicks, weil es eben die GlassPane erhält. Nun könnte man damit herumspielen, aber ich weiß nicht ob das der beste Weg ist.
Bekommt ein MouseListener am Popup die Klicks? Eventuell ist es darüber einfacher handhabbar.
 

Kaffeebohn

Bekanntes Mitglied
Hi Kroko,

das mit der Glaspane ist schon mal ein guter Hinweis, werde dem mal direkt nachgehen.

Das PopupMenu hat nen Listener, mit dem die Events

popupMenuCanceled
popupMenuWillBecomeInvisible
popupMenuWillBecomeVisible

abgefangen werden können. Das ist ja grundsätzlich das was ich erreichen möchte, allerdings fehlt mir dann ein MouseEvent mit den Klick-Koordinaten.

Liebe Grüße
 

Kaffeebohn

Bekanntes Mitglied
Ich hab das Problem jetzt vorläufig mal bissle unschön umpfriemelt, und zwar wie folgt:


Im Listener

public void popupMenuCanceled(PopupMenuEvent arg0)

erzeuge ich von Hand ein neues MouseEvent und rufe damit die Methode mousePressed(MouseEvent e) auf. Die Koordinaten für den ClickPoint lasse ich im Listener mouseMoved(MouseEvent e) immer mitprotokollieren und schreib sie in ein Klassenattribut.

Das ist jetzt keine besonders schöne Lösung, aber sie funktioniert. Wenn jemandem von euch auf eine bessere Idee/Lösung kommt, freue ich mich über weitere Vorschläge!

Liebe Grüße,
Kaffeebohn
 
G

Gast2

Gast
Puh ok.
Ich schreibe aus grober Erinnerung, ich denke das steht in der API zu JFrame oder JWindow. Jedenfalls ist es glaube ich so, dass das Popupmenü auf der GlassPane angezeigt wird und daher bekommt die darunterliegende Komponente keine Klicks, weil es eben die GlassPane erhält. Nun könnte man damit herumspielen, aber ich weiß nicht ob das der beste Weg ist.
Bekommt ein MouseListener am Popup die Klicks? Eventuell ist es darüber einfacher handhabbar.

Glaub kommt auf die Java Version an man kann irgendein System Property setzen dann werden die event nicht consumed...
 

Kaffeebohn

Bekanntes Mitglied
Danke SirWayne, das scheint der entscheidende Hinweis gewesen zu sein


Java:
UIManager.put("PopupMenu.consumeEventOnClose", false);

Auf den ersten Blick klappt alles so wie es soll.

Vielen Dank und liebe Grüße
 
G

Gast2

Gast
Ja das war früher immer auf false, aber beim Windows L&F haben sie das Property mißbraucht um das Verhalten des Icons Symbol links oben richtig nachzustellen. Wurde glaub bei der 1.6 Version geändert. Total häßlich!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Event Handling Listener beim öffnen von einem JPopupMenu AWT, Swing, JavaFX & SWT 3
xehpuk Swing Listener für JPopupMenu AWT, Swing, JavaFX & SWT 3
padde479 MenuItem MouseEvent/-Listener AWT, Swing, JavaFX & SWT 5
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
J Key-Listener in Java AWT, Swing, JavaFX & SWT 37
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
M List Listener AWT, Swing, JavaFX & SWT 37
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
U Funktionsweise Listener AWT, Swing, JavaFX & SWT 1
L TextField Listener AWT, Swing, JavaFX & SWT 13
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Salo JTabel Selection listener Bsp. AWT, Swing, JavaFX & SWT 5
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
J Action Listener Rückgabewert AWT, Swing, JavaFX & SWT 14
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
S Swing Tabellen - Listener & richtige Row AWT, Swing, JavaFX & SWT 3
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
S Erste Schritte mit GUI - Fileverarbeitung, Listener,... AWT, Swing, JavaFX & SWT 10
M JButton - Listener AWT, Swing, JavaFX & SWT 1
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
M Key Listener reagiert nicht AWT, Swing, JavaFX & SWT 4
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
M Listener funktioniert nicht AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
llabusch Event Handling Listener spielt verrückt AWT, Swing, JavaFX & SWT 8
kaoZ Swing Architektonisches Problem / Listener / MVC AWT, Swing, JavaFX & SWT 14
H org.eclipse.swt.widgets.Scale MouseRelease listener AWT, Swing, JavaFX & SWT 1
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
A Listener für JGTextField AWT, Swing, JavaFX & SWT 2
J Programmierstil: Kommunikation Listener und GUI AWT, Swing, JavaFX & SWT 3
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
E Listener AWT, Swing, JavaFX & SWT 3
M SWING Listener ohne Wirkung AWT, Swing, JavaFX & SWT 2
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
J Swing dragging listener AWT, Swing, JavaFX & SWT 5
H Problem mit dem Action listener.... AWT, Swing, JavaFX & SWT 2
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
M Fenster schließen - Listener AWT, Swing, JavaFX & SWT 5
G SWT TreeViewer - drop listener austauschen AWT, Swing, JavaFX & SWT 2
S Action Listener in innerer Klasse ausführen. AWT, Swing, JavaFX & SWT 8
J Sinn eines Selection Listener AWT, Swing, JavaFX & SWT 5
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
M comboBox Listener? AWT, Swing, JavaFX & SWT 2
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
T SWT: Listener auf einem Button reagiert nicht AWT, Swing, JavaFX & SWT 2
L Swing JTextField Content-Listener AWT, Swing, JavaFX & SWT 4
P AWT Wie kann mein listener den Inhalt eines anderen Textfelds ändern? AWT, Swing, JavaFX & SWT 10
M Ansätze zur Kombination mehrerer Listener für Interaktion AWT, Swing, JavaFX & SWT 19
C JLabel Listener auf Textänderung? AWT, Swing, JavaFX & SWT 5
M Mouse Wheel Listener reagiert mehrmals AWT, Swing, JavaFX & SWT 5
F SWT Button listener richtig erstellen AWT, Swing, JavaFX & SWT 2
El_Lobo Swing Problem bei Methodenaufruf in innerer Klasse bei Listener AWT, Swing, JavaFX & SWT 3
S Wem füge ich welchen Listener hinzu? AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
T Callback vs. Event listener AWT, Swing, JavaFX & SWT 7
S Swing JTree und seine Listener... AWT, Swing, JavaFX & SWT 4
E JComboBox Listener AWT, Swing, JavaFX & SWT 2
AyKay SWT (alle) Listener bzw. ModifyEventListener entfernen AWT, Swing, JavaFX & SWT 2
S jTextField Listener AWT, Swing, JavaFX & SWT 7
E Listener, werte in andere Klasse übernehmen AWT, Swing, JavaFX & SWT 11
L Action listener in bestimmter spalte AWT, Swing, JavaFX & SWT 2
J AWT Action Listener etc. AWT, Swing, JavaFX & SWT 7
F JCalendar mouseclick listener AWT, Swing, JavaFX & SWT 2
W AWT Listener bei TrayIcon AWT, Swing, JavaFX & SWT 2
E Swing JTextField Listener nach Update?! AWT, Swing, JavaFX & SWT 2
T TransformGroup Listener AWT, Swing, JavaFX & SWT 8
O Swing JTable Listener AWT, Swing, JavaFX & SWT 2
O Collection Listener AWT, Swing, JavaFX & SWT 6
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
G JTree - Observer oder Listener? AWT, Swing, JavaFX & SWT 6
Avalarion SWT Listener auf Label oder Text Teile AWT, Swing, JavaFX & SWT 10
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
L JTextfield Listener AWT, Swing, JavaFX & SWT 3
C Listener Probleme AWT, Swing, JavaFX & SWT 6
N Listener für Variable AWT, Swing, JavaFX & SWT 4
C Swing Listener für TabPanel AWT, Swing, JavaFX & SWT 8
B Line aus Listener? AWT, Swing, JavaFX & SWT 11
G Model,Listener und background jobs AWT, Swing, JavaFX & SWT 4
1 JList - clearSelection nicht berücksichtigen im Listener AWT, Swing, JavaFX & SWT 7
I Swing Listener auf JPanel AWT, Swing, JavaFX & SWT 9
Dit_ MutableComboBoxModel | Listener fehlt ? AWT, Swing, JavaFX & SWT 6
T Swing JSlider und Adjustment-Listener wollen nicht so recht AWT, Swing, JavaFX & SWT 2
N Swing Textfield listener AWT, Swing, JavaFX & SWT 2
S Combo Box action listener AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben