Das Problem ist, dass Ihr Code in einem einzigen Ereignis stecken bleibt. Auch wenn Sie die Maus bewegen oder die Maustaste loslassen, werden sich die Werte der Ereignisinstanz, mit der Sie arbeiten, nicht ändern.
Denken Sie an das Ereignis als einen einzelnen Zustand. Wenn etwas Wichtiges passiert (in Ihrem Fall wird eine Maustaste geklickt), ruft javafx Ihren mausEventHandler mit einer MouseEvent-Instanz mit dem Status der Maus in diesem Moment auf. Wenn Sie erneut klicken, erstellt javafx eine neue Instanz mit neuen Werten und ruft den eventHandler erneut auf.
Damit dies funktioniert, benötigen Sie ein anderes Mausereignis (oder ändern Sie es geringfügig, so dass nur ein Punkt mit einem einzigen Mausklick gesetzt werden kann). Sie müssen die (unendliche) while-Schleife verlieren, da sie sowohl das EventThread blockiert als auch nicht für die Dinge arbeitet, die Sie dafür benötigen. So etwas könnte ein bisschen besser funktionieren.
// 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());
});
Jetzt gibt es eine MouseDragEvent, aber das ist vor allem für Daten zu bewegen (wie Bilder und Dateien), aber ich würde es nicht empfehlen. In Ihrem Fall ist es nicht sehr nützlich, und sein Verhalten ist immer noch Buggy.
Ich hoffe, dass dies Ihnen in die richtige Richtung geholfen hat.
Um zu verdeutlichen, wird der Code, den Sie an einen Event-Handler übergeben (z. B. 'onMouseClicked') * jedes Mal * ausgeführt, wenn das Ereignis eintritt. Sie brauchen hier keine Schleife. –