Comment faire pour obtenir l'emplacement de la souris dans le JavaFX?
Je suis un débutant en java(fx).
Comment voulez-vous obtenir la position de la souris en x et y dans JavaFX? J'ai essayé d'utiliser AWT est MouseInfo
(également importé), mais cela ne fonctionne pas. J'ai aussi vu le code dans des Ensembles(que glisser la balle-fenêtre dans "stade avancé", c'est ce que je dois faire, faites glisser ma nudité JavaFX scène), mais elle ne fonctionne pas. Je suis à l'aide de FXML avec le contrôleur, et je suppose que c'est le problème principal. Dois-je revenir à l'unique fichier simple JavaFX? Je sais FXML est mieux pour la pose de l'INTERFACE utilisateur, mais je ne peux pas obtenir beaucoup de ces codes de travail. Ou ai-je besoin d'une autre sorte de code pour mon contrôleur? Veuillez donner des codes appropriés avec des commentaires dans la mesure du possible.
Si vous avez besoin d'un peu mon code pour inspecter, n'hésitez pas à demander.
OriginalL'auteur Pratik Anand | 2013-05-19
Vous devez vous connecter pour publier un commentaire.
Il y a quelques éléments dans votre question - je vais les aborder une à une.
Ajouter une souris gestionnaire d'événement à l'appropriées JavaFX composant que vous souhaitez suivre la position de la souris. Un JavaFX événement de souris fera rapport plusieurs différents types de coordonnées. X et y coordonnées sont relatives au coin supérieur gauche du nœud dont l'emplacement est surveillé. Le sceneX et sceneY coordonnées sont par rapport à la scène en haut à gauche de 0,0 coordonnées. Le screenX et screenY coordonnées sont relatives à la partie supérieure gauche 0,0 coordonnées de l'écran actuel.
De ces coordonnées sont documentées dans le MouseEvent de la documentation. Il y a des informations supplémentaires dans la compréhension des systèmes de coordonnées dans le Nœud et Scène de la documentation.
Ne pas le faire. Mélange de différents outils graphiques (par exemple Swing/AWT et JavaFX) est un sujet avancé. En général, si vous écrivez une application JavaFX., éviter l'importation de tout, de la
java.awt
espace de noms et lejavax.swing
espace de noms. Vous ne vraiment besoin d'utiliser ces si vous avez un grand, Balançoire existante en fonction de l'application ou de cadre que vous avez besoin d'inter-opérer avec votre JavaFX application. Dans ce cas, vous n'avez pas cette situation.J'ai essayé l'Ensemble à un Stade Avancé de l'échantillon et faites glisser ce stade autour de travaillé pour moi.
Un autre exemple pour le déplacement d'une scène de nudité dans JavaFX est dans la réponse à la Comment dessiner une horloge avec JavaFX 2? qui a associée exemple de code. La méthode utilisée pour faire la scène de nudité déplaçable pour l'horloge d'échantillonnage est:
Manque de compréhension et de la connaissance du sous-jacent Api JavaFX est probablement votre principal problème, plutôt que d'utiliser des FXML. Cependant, la complexité supplémentaire fxml implique avec le plus léger de la documentation et des échantillons sur le web est peut-être contribuer à vos difficultés. Si l'utilisation du FXML est ce qui rend difficile pour vous de comprendre comment l'obtenir JavaFX fonctions de travail, je vous conseille d'arrêter d'utiliser FXML pour l'instant. Le Code de la logique à la main à l'aide de l'Api Java et reportez-vous à la Oracle tutoriels JavaFX et la L'Ensemble de l'échantillon de code lorsque vous rencontrez des choses qui sont difficiles pour vous.
Une fois que vous êtes à l'aise codage directement à l'API JavaFX, revenir à l'aide de FXML pour les grands projets qui contiennent de nombreux éléments d'interface graphique. Le FXML les éléments et les attributs sont eux-mêmes construit presque entièrement sur la réflexion de la norme Api JavaFX. Donc, si vous comprenez le core Api JavaFX, vous avez également de comprendre presque tout ce que FXML.
Merci de ne pas poster de suivi des commentaires de cette réponse (que cette réponse est assez long, car il l'est). Si vous avez de nouvelles questions, de créer une nouvelle question (une question par question).
puis-je utiliser cette astuce pour afficher le menu de Windows 8? ( Moyenne d'afficher le menu lorsque la souris passe au coin )
non, vous ne pouvez pas, autant que je sache. Les événements de souris sont seulement transmises à une scène. Si vous avez une application en plein écran, puis vous pouvez le faire, mais si votre application est en mode fenêtré ou réduit et vous souhaitez afficher un menu basé sur la souris en déplaçant le coin de l'écran, vous ne pouvez pas le faire. Je ne suis pas sûr de savoir comment vous pouvez faire cela. Vous pouvez créer une nouvelle question.
Magnifique, merci!
Cela donne juste valeur entière avec ".0", Alors, comment pouvons-nous trouver une position absolue dans le double e.g: 22.75 etc.
OriginalL'auteur jewelsea
Que sur l'utilisation de Robot pour cette raison ?
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html
À l'aide de Robots, il est différent de l'affichage des événements à file d'attente d'événements AWT. Les événements sont générés dans le native file d'attente des événements. En fait, avec
Robot.mouseMove
vous permettra non seulement de définir la position de la souris et pas seulement obtenir la position.Pour obtenir la position de la souris, vous pouvez coller à
MouseInfo
Ça ne fonctionne pas: êtes-vous avec le Mac ? Qui est votre version de JavaFX ? semble correction de problèmes pour FX8. Pour mac, vous pouvez utiliser
Puis-je utiliser ce robot (c'est juste pour le test d'automatisation, ou puis-je l'utiliser dans le monde réel?) sur windows? Et bien que MouseInfo avec le point des travaux, il donne à la fois de x et y ensemble.(java.awt.Le Point[x=449,y=323]) j'ai besoin d'eux distinct. Comment faire?
oui. awt.le point : vous avez deux champs x et y
le robot fonctionne sur windows: com.soleil.verre.l'interface utilisateur.Robot = com.soleil.verre.l'interface utilisateur.Application.GetApplication().createRobot(); int x = robot.getMouseX(); System..println("emplacement de Souris sur x est:" + x);
OriginalL'auteur octoback
JavaFx 8 WindowEvent ne fournit pas les (x,y) emplacement de la souris, malheureusement. J'ai résolu ce problème (et il fonctionne très bien) à l'aide de l'AWT MouseInfo comme ceci:
OriginalL'auteur George Forman