問題は、コードが1つのイベントでスタックしてしまうことです。マウスを動かしたり、マウスボタンを離しても、使用しているイベントインスタンスの値は変更されません。
イベントを単一の状態と見なします。何か重要なことが起こると(あなたのマウスボタンがクリックされると)、javafxは、そのverryの瞬間にマウスの状態でMouseEventインスタンスを使ってmouseEventHandlerを呼び出します。再度クリックすると、javafxは新しい値で新しいインスタンスを作成し、再度eventHandlerを呼び出します。
この作業を行うには、別のマウスイベントが必要です(またはマウスのクリック1回だけの点を設定するようにわずかに変更する必要があります)。あなたは(無限の)whileループを失う必要があります。なぜなら、EventThreadをブロックし、必要なものを処理していないからです。だから、このようなものが少しうまくいくかもしれません。
// 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());
});
は、今そこにMouseDragEventあるが、ほとんど(画像やファイルなど)のデータを移動するためのthatsのが、私はそれをお勧めwouldntの。あなたの場合、それはそれほど有用ではありません、そして、その行動はまだバグを終了します。
これが正しい方向にあなたを助けてくれることを願っています。
明確にするために、イベントハンドラに渡すコード(onMouseClickedなど)は、イベントが発生するたびに*実行されます。ここにループは必要ありません。 –