6
votes

Java - Pouvons-nous détecter si une clé est enfoncée sans utiliser d'auditeur?

J'ai besoin de pouvoir détecter si une certaine clé (par exemple Ctrl) est enfoncée lors d'une opération spécifique de mine. Je n'ai pas accès à un auditeur clé, ni à un événement de la souris. Ce que j'espère, c'est qu'il y aura une classe qui a une méthode comme "boolean iskeyimprimé (keycode)".

Quelqu'un est-il au courant d'une méthode comme celle-ci en Java?

Pour un peu de fond, j'essaie de remplacer le comportement de glisser-déposer par défaut pour un composant. Par défaut, selon les Javadocs pour Droptargetdragevent , si aucun modificateur de clé n'est enfoncé, il ressemble à la liste des actions pris en charge du composant pour un déplacement, puis une copie et ensuite un lien et s'arrête après avoir trouvé le premier.

Dans ma demande, nous prenons en charge la copie et le lien. Selon le Javadoc, sans la touche CTRL enfoncée, l'action par défaut est copie. Nous voulons que l'utilisateur puisse spécifier l'action par défaut (leur permettant de définir leur plus couramment utilisé), puis de forcer une spécifique à l'aide des touches de modificateur.

Si je peux détecter l'état appuyé sur la touche, je peux forcer cela pour arriver, mais je ne vois aucune autre façon de changer l'action par défaut.

Merci d'avance, Brian


2 commentaires

Pourquoi n'avez-vous pas accès à un auditeur? Vous ne pouvez pas créer le vôtre? Quel cadre GUI utilisez-vous?


Noel - Voir mon commentaire contre Eric Robertsons Post.


4 Réponses :


0
votes

Même s'il y avait une telle méthode, que veux-tu faire avec ça? Appelez-le dans une boucle sans fin dans l'espoir qu'il revient bien à un moment donné? Je pense qu'un mécanisme basé sur des événements / auditeur convient bien mieux dans ce cas.


1 commentaires

Pas une boucle sans fin, non. Appelé simplement sur la demande lors d'une certaine opération (rappel pendant le glisser-déposer).



5
votes

Le MouseEvent.GetModifications () La méthode renvoie un bitmap de touches de modification qui sont enfoncées au moment où le Mouseevent a été généré. Ou, vous pouvez utiliser mouseevent.iscontroldown () pour vérifier spécifiquement la clé Ctrl.


3 commentaires

Je conviens que dans un monde idéal, un auditeur clé serait probablement mieux. Cependant, à mon avis, cette approche pose des problèmes pour mon scénario: qu'est-ce que je joint à l'auditeur? Mon application est assez complexe en termes d'interface utilisateur et est également personnalisable via des plugins. J'ai envisagé de joindre un auditeur au fil de l'événement, mais cela finit par traiter tous les événements clés et peut avoir des implications de performance ailleurs. De même, l'extensibilité de l'application signifie que je n'ai pas nécessairement de moyen de détecter le début de la traînée et donc je ne peux donc pas émettre de manière sélective l'auditeur sur


Je viens de jouer avec un auditeur de clé et il s'avère que les événements clés ne sont pas tirés lorsque un bouton de la souris est maintenu (et je travaille avec glisser-déposer ici) et cela règle un auditeur clé. Je suppose que je pouvais regarder un auditeur mondial de souris et vérifier l'état des modificateurs, mais cela semble être trop exclu pour ce problème.


J'ai mis à jour ma réponse - Vous pouvez vérifier que le MouseEevent étant généré chaque fois que la souris est déplacée ou glissée.



0
votes

Je pense que vous allez à ce sujet le mauvais sens. Ce que vous voulez faire, c'est changer l'action lorsque la traînée est initiée, pas quand elle est tombée. Il existe des moyens de modifier ce que l'action est sur l'initiation, y compris d'interroger les préférences de l'utilisateur dans le cas "sans modificateurs". Il est possible que la modification de la façon dont le droptargetdragevent est appelé.


1 commentaires

Je suis d'accord - mais je n'ai pas été en mesure de déterminer comment définir le cas "Aucun modificateur" dans le code - Les Javadocs (voir le lien dans mon poste d'origine) indiquent que la copie prend la priorité sur le lien. Si vous avez des suggestions sur la façon de faire cela, cela serait très apprécié.



1
votes

C'est une façon éventuellement sale d'y aller. Mais cela vous permet d'«enregistrer» les événements clés, puis de les interroger. xxx


0 commentaires