Ich habe eine Anwendung, in der Sie eine rechte Maustaste drücken und ziehen können (sowie ein linkes Drücken und Ziehen für verschiedene Operationen). Allerdings, wenn Sie dies auf Linux ausführen, scheint es, dass Popup-Menüs durch eine MousePressed und nicht eine MouseReleased ausgelöst werden. Dies führt dazu, dass jedes Mal, wenn ich die rechte Maustaste drücke, um einen Ziehvorgang auszuführen, die Popup-Menüs ausgelöst werden (im Gegensatz zu Fenstern, wo es per Maus freigegeben wird).
Irgendwelche Gedanken darüber, wie man das umgehen kann?
danke.
EDIT: Buchungscode
Code für das Popup-Menü
%Vor%Dieser Code ist das, was bei Drücken / Ziehen der rechten Maustaste aufgerufen wird (dies ist ein 3rd-Party-Code, aber er ist Open-Source, so dass ich ihn nach Bedarf ändern kann)
%Vor% Ja, verwenden Sie isPopupTrigger()
, wie hier hier .
Nachtrag:
es scheint
isPopupTrigger
wird ammousePressed
in linux ausgelöst.
Ja, unter Mac OS X ist es dasselbe. Sie müssen isPopupTrigger()
sowohl von mousePressed()
als auch von mouseReleased()
aufrufen. Es gibt ein ähnliches Beispiel in GraphPanel
.
MausEreignis.isPopupTrigger (). Gibt zurück, ob dieses Mausereignis das Auslösen des Popup-Menüs für die Plattform ist oder nicht.
edit -: Sie müssen sowohl mousePressed für linux als auch mouseReleased für Windows einchecken.
Ich denke, die richtige Vorgehensweise in Ihrem Fall sollte sein, wo und wann das Popup angezeigt wird. Wenn ein Ziehereignis vorhanden ist, folgt er einem Presseereignis. Sie sollten es vermeiden, Logik zu schreiben, um das Popup im Presseereignis anzuzeigen (und dann Logik in das Presseereignis zu schreiben, um das Popup anzuzeigen) . Einige Benutzer fühlen sich gut beim Navigieren durch das Popup, während sie die Popup-Taste gedrückt halten, und einige andere Benutzer sind einfach nicht interessiert oder wissen es nicht. In diesem Fall können Sie jedoch nicht durch Ziehen im Popup-Menü navigieren, ohne zusätzlichen Code hinzuzufügen.
Mein Weg wäre, die Logik so zu verwalten, dass immer das Popup des Release-Ereignisses angezeigt wird. Das Eingeben eines Release-Ereignisses nach dem Ziehen sollte ausreichen, um zu wissen, dass das Popup nicht sichtbar sein sollte. Und natürlich immer, wenn Sie die Quelle ändern und ändern können.