8
votes

générer une souris de souris à JavaFX

J'ai besoin de simuler un mouseevent.mouse_clicked . Je veux utiliser la méthode Fireeevant d'un nœud particulier afin d'envoyer un événement du type susmentionné. Cependant, je me débats en générant un. Il semble que javafx.scene.input.mouseevent n'a pas de constructeur valide, mais ancien java.awt.event.mouseevent Les objets peuvent être instanciés de cette façon. Néanmoins, je n'ai trouvé aucune solution de travail pour la conversion. Comment puis-je faire ce tour?

Merci.


3 commentaires

Vous pouvez simuler la souris click à l'aide de java.awt.robot.mouse * méthodes


droite, mais comment convertir java.awt.event.mouseevent à javafx.scene.input.mouseevent ? La signature de méthode qui gère l'événement réel nécessite le MouseEveillant de JavaFX. * Paquet


Si vous utilisez une classe de robots, il simulera le clic de souris, quelle infrastructure Java FX attrapera et créera toutes les classes requises en soi. Vous dites juste smth comme robot.mousepress (10,10) pour cela.


4 Réponses :


8
votes

Vous pouvez générer un sourire de souris à base de souris à l'aide de l'API de MouseEvent.Impl_Mouseevent. Je l'ai déjà fait précédemment dans ce Fil du forum pour JavaFX 2.0. Notez que l'API est obsolète pour une raison - elle est une API privée utilisée dans la mise en œuvre de JavaFX et l'API n'est pas garantie de maintenir la même signature ou même exister dans les versions futures (qui peuvent être prouvées parce que le code d'origine que j'ai posté dans le Le fil du forum ne compile plus.

La solution correcte pour générer un tel événement est d'avoir une API publique afin de le soutenir. Il y a déjà eu une demande déposée à fournir cette fonctionnalité RT-9383 "Ajouter des constructeurs et usines appropriés Méthodes pour les classes d'événement, supprimer Implez ". Cette JIRA devait être achevée l'année prochaine pour JavaFX 3.0.

Entre-temps, l'utilisation de la classe de robots Comme Sergey suggère est probablement votre meilleure méthode.


mise à jour: java 8 ajouté constructeurs publics pour javafx.event.mouseevent et le (comme indiqué dans la réponse de Jay Thakkar), vous pouvez déclencher un tel événement en utilisant Event.Fireeevent (Vous pouvez aussi Evénements d'incendie sur Windows ).


2 commentaires

Toute une réponse élaborée. Merci.


Jira Access travaille pour moi. Les nouveaux constructeurs d'événements ont été ajoutés au DIRECTION JAVA 8 à libérer l'année prochaine.



15
votes

Cela déclenchera une seule souris principale Cliquez à votre noeud:

import javafx.event.Event; 
import javafx.scene.input.MouseButton; 
import javafx.scene.input.MouseEvent;

Event.fireEvent(YOUR NODE, new MouseEvent(MouseEvent.MOUSE_CLICKED, 0,
                0, 0, 0, MouseButton.PRIMARY, 1, true, true, true, true,
                true, true, true, true, true, true, null));


2 commentaires

Forfaits pour référence: importer javafx.event.event; Importer javafx.scene.input.mouseButton; import javafx.scene.input.mouseevent;


Pourquoi passez-vous true pour toutes les touches de modification ( Changement , contraire , etc.)? J'étais sous l'hypothèse qu'un clic de Jane simple n'aurait aucun des modificateurs.



3
votes

ou vous pouvez utiliser un simple "hack" pour effectuer un clic programmatique sur le bouton. Créez cette méthode dans une classe "UTIL": xxx

puis, pour "cliquer" sur le bouton, appelez simplement la méthode en transmettant votre bouton comme paramètre.


0 commentaires

1
votes

Lorsque vous définissez un gestionnaire, il établit une propriété publique. Vous pouvez obtenir l'événement à partir de cette propriété et de cette poignée d'appel ():

button1.setOnMouseClicked()....
the corresponding property is
button1.onMouseClickedProperty().get().handle(me);//where me is some MouseEvent object


0 commentaires