10
votes

Java Popup Trigger à Linux

J'ai une application dans laquelle vous pouvez faire un bouton droit de la souris, appuyez sur la touche et faites-la glisser (ainsi que de la touche gauche et faites-la glisser pour différentes opérations). Cependant, lors de l'exécution de Linux, il semble que les menus contextuels soient déclenchés par un musouse et non une souris à jour. Cela entraîne chaque fois que j'appuie sur le bouton droit de la souris pour effectuer une glisser-glisser, les menus contextuels sont déclenchés (contrairement à Windows, où il est Mousserélie).

Toute réflexion sur la façon de travailler autour de cela? P>

Merci. P>

EDIT: Code d'affichage P>

Code pour le menu contextuel P>

// this is called on all mouse events
if (buttonAction.mouseButton != 0)
{
    // handle the event
}


0 commentaires

3 Réponses :


13
votes

Oui, utilisez ispopuptrigger () , comme indiqué Ici .

addendum:

Il apparaît ispopuptrigger est déclenché sur sourisprimé sous Linux.

Oui, c'est la même chose sur Mac OS X. Vous devez appeler ispopuptrigger () à partir des deux sourisprimé () et Moussereled () . Il y a un exemple associé à GRAPHPANEL .


6 commentaires

Je suis, il semble que Ispopuptrigger est déclenché sur MousousePressé sous Linux.


Droite, donc si j'utilise une bibliothèque 3ème partie qui effectue une action non contextuelle lorsque la souris droite est enfoncée et que la souris droite est enfoncée, cela signifie-t-il que le menu contextuel s'affichera toujours lorsque vous essayez de faire cette autre action?


Je viens d'essayer graphpanel sur Windows, et je vois ce que tu veux dire. L'API tiers expose-t-elle son modèle de sélection?


Oui, j'ai un accès complet au code afin que je puisse modifier tout ce qui concerne la sélection dont j'ai besoin.


Je ne vois pas une façon pour un geste d'évoquer deux comportements différents sans autre queue. Utilisation de Consume () / ISConsumé () peut être un moyen, mais vous pouvez toujours commander le troisième bouton ou utiliser une clé de modificateur comme signal pour résoudre ce sens que la signification est destinée. Pour référence, sur Mac OS X, ispopuptrigger () retourne true lorsque vous appuyez sur la touche de contrôle.


Oui, je devrai construire probablement dans un mécanisme plus avancé, tel que la maintien de la clé de contrôle.



1
votes

mouseevent.ispopuptrigger (). Retourne si cet événement de souris est l'événement de déclenchement du menu contextuel de la plate-forme.

Edit -: vous devez effectuer la vérification des souris à la souris pour Linux et Mousserélied pour Windows.


5 commentaires

Droite, je fais ça. Mon problème est que chaque fois que j'appuie sur le bouton droit de la souris pour effectuer la presse droite / glisser-pression, le menu contextuel montre (ce que je ne veux pas).


Cela vous dérangerait-il de poster le code de ces deux méthodes? Difficile de dire ce que vous faites après / avant de faire le chèque sans cela.


Aller par la logique que vous avez posté, il va toujours afficher le menu contextuel. Vous vérifiez si c'était un déclencheur de popup (ce qu'il sera), puis votre commentaire lit "// montrer le menu contextuel". Si vous ne voulez pas que la popup affiche, revenez simplement à l'intérieur de cette condition au lieu de montrer la popup.


Sauf si vous planifiez le plan de faire plus à la suite de la presse ou de la libération de la souris. Dans ce cas, vous pouvez simplement consommer de l'événement et faire ce que vous vouliez faire. Alors quelque chose comme: si (e.ispopuptrigger ()) {E.Consume ();} // fantaisie jazz


Une chose que je pourrais faire est de définir un drapeau sur la sourissed, puis sur Mousereled Show the Menu popup si l'événement n'a pas été consommé.



1
votes

Je pense que la procédure correcte dans votre cas devrait être d'unifier où et quand montrer la popup. En tant qu'étrage de Drag, s'il existe, si vous existez, suit un événement de presse, vous devriez éviter l'écriture de la logique pour afficher la fenêtre contextuelle dans l'événement de presse (puis écrire la logique dans l'événement de presse pour afficher la fenêtre contextuelle) . Certains utilisateurs se sentent bien de naviguer dans la popup tout en maintenant le bouton contextuel et certains autres utilisateurs ne s'en soucient pas ou ne savent pas. Mais dans votre cas, vous ne pourrez pas naviguer dans le menu contextuel tout en faisant glisser sans ajouter de code supplémentaire.

My Way gérerions-nous de gérer la logique pour toujours afficher la pop up de l'événement de sortie. Saisie d'un événement de sortie après une traînée doit être suffisamment d'informations pour savoir que la popup ne doit pas être visible. Et bien sûr, toujours si vous pouvez changer et modifier la source.


0 commentaires