Java popup trigger sous Linux

j'ai une application dans laquelle vous pouvez faire un bouton droit de la souris presser et glisser (ainsi qu'une gauche presser et glisser pour différentes opérations). Cependant, lorsqu'on exécute ceci sur linux, il semble que les menus popup soient déclenchés par une souris pressée et non pas une souris relâchée. Cela se traduit à chaque fois que j'appuie sur le bouton droit de la souris pour effectuer une traînée, les menus popup sont déclenchés (contrairement à windows, où il est mouseReleased).

des idées sur la façon de contourner cette?

merci.

EDIT: Posting code

Code pour le menu

// this is called from mousePressed and mouseReleased
if (e.isPopupTrigger() && !e.isConsumed()) {
    // show the popup menu
}

ce code est ce qui est appelé sur la souris droite press/drag (c'est du code de tierce partie, mais il est open source donc je peux changer si nécessaire)

// this is called on all mouse events
if (buttonAction.mouseButton != 0)
{
    // handle the event
}
8
demandé sur Jeff Storey 2011-04-21 01:29:26

3 réponses

Oui, utilisez isPopupTrigger(), comme le montre ici.

Addendum:

il s'affiche isPopupTrigger est déclenchée sur mousePressed sous linux.

Oui, c'est la même chose sur Mac OS X. Vous devez appeler isPopupTrigger() à partir de mousePressed() et mouseReleased(). Il y a un exemple connexe dans GraphPanel.

11
répondu trashgod 2011-04-20 21:55:02

MouseEvent.isPopupTrigger (). Renvoie si cet événement de la souris est l'événement déclencheur du menu popup pour la plate-forme.

edit -: vous devez faire le check à la fois dans mousePressed pour linux, et mouseReleased pour windows.

1
répondu user512802 2011-04-20 21:40:05

je pense que la procédure correcte dans votre cas devrait être d'unifier où et quand montrer le popup. Comme un événement de traînée, s'il existe, suit un événement de presse vous devriez éviter la logique d'écriture pour montrer le popup dans l'événement de presse (et ensuite aussi écrire logic dans l'événement de presse pour afficher le popup). Certains utilisateurs se sentent bien de naviguer dans le popup tout en maintenant le bouton popup, et d'autres utilisateurs ne s'en soucient pas ou ne savent pas. Mais dans votre cas, vous ne pourrez pas naviguer dans le popup menu en glissant sans ajouter de code supplémentaire.

a ma façon, nous devrions gérer la logique pour toujours montrer le popup sur l'événement de sortie. Entrer un événement de publication après une traînée devrait être une information suffisante pour savoir que le popup ne devrait pas être visible. Et bien sûr, toujours si vous pouvez modifier la source.

0
répondu Sebastian 2011-05-28 20:17:27