Le problème est que votre code est bloqué dans un seul événement. Même lorsque vous déplacez la souris ou relâchez le bouton de la souris, les valeurs de l'instance d'événement avec laquelle vous travaillez ne vont pas changer.
Considérez l'événement comme un état unique. Quand quelque chose d'important arrive (dans votre cas, un clic de souris est cliqué), javafx appellera votre mouseEventHandler en utilisant une instance MouseEvent avec l'état de la souris à ce moment. Lorsque vous cliquez à nouveau, javafx créera une nouvelle instance avec de nouvelles valeurs et appellera à nouveau le gestionnaire d'événements. Pour que cela fonctionne, vous avez besoin d'un autre événement de souris (ou modifiez-le légèrement afin de définir un seul point sur un seul clic de souris). Vous devez perdre la boucle while (infinie) car elle bloque à la fois EventThread et ne fonctionne pas pour les choses dont vous avez besoin. Donc, quelque chose comme ça pourrait fonctionner un peu mieux.
// this will add a point for every (secondary)mousebutton click
rootPane.setOnMouseClicked((MouseEvent me) -> {
if(me.isSecondaryButtonDown())
polygon.getPoints().addAll(me.getX(),me.getY());
});
// this will add a point for every mousemovement while the secondary mousebutton is down.
rootPane.setOnMouseMoved((MouseEvent) me -> {
if(me.isSecondaryButtonDown())
polygon.getPoints().addAll(me.getX(),me.getY());
});
Maintenant, il y a un MouseDragEvent, mais c'est la plupart du temps pour déplacer des données (comme les images et les fichiers), mais je ne le recommanderais ce. Dans votre cas, il n'est pas très utile, et son comportement est encore buggé. J'espère que cela vous a aidé dans la bonne direction.
Pour clarifier, le code que vous passez dans un gestionnaire d'événements (tel que 'onMouseClicked') est exécuté * chaque fois que l'événement se produit. Vous n'avez pas besoin d'une boucle ici. –