2016-03-24 10 views
0

マウスを使って線を描くための私のプログラムにウィンドウを書き込もうとしています。私はこれまでのところ、このソリューションが付属していました:javaFX、一度に2つのmouseEvents

public class TrackEditor extends Stage 
{ 
    TrackDescription editedTrackDescription; 
    double startX, startY; 
    LineTo line; 
    MoveTo move; 
    boolean pressed; 

    public TrackEditor() 
    { 
     Path path = new Path(); 
     this.setTitle("New Game"); 
     this.setResizable(false); 

     StackPane stackPane = new StackPane(); 
     SquareGrid squareGrid = new SquareGrid(); 
     Pane drawingPane = new Pane(); 
     Pane activePane = new Pane(); 
     stackPane.getChildren().addAll(squareGrid,drawingPane, activePane);   
     drawingPane.getChildren().add(path); 
     activePane.setOnMousePressed((MouseEvent me) -> { 
      pressed = true; 
      startX = me.getX(); 
      startY = me.getY(); 
      move = new MoveTo(me.getX(), me.getY());    
      path.getElements().add(move); 
     }); 
     activePane.setOnMouseReleased((MouseEvent me) -> { 
      pressed = false; 
      line = new LineTo(me.getX(), me.getY());   
      path.getElements().add(line); 
     }); 
     activePane.setOnMouseMoved((MouseEvent me) -> { 
      if(pressed) 
      { 
       activePane.getChildren().clear(); 
       Line temporaryLine = new Line(startX, startY, me.getX(), me.getY()); 
       activePane.getChildren().add(temporaryLine); 
      } 
     });  


     Scene scene = new Scene(stackPane); 


     this.setScene(scene); 
     this.initModality(Modality.APPLICATION_MODAL);  
     this.sizeToScene(); 
     this.show(); 
    }  
} 

しかし、私が観察してきたように、マウスボタンが押されたときに、一時的なラインが描かれていません。イベントMousePressedMouse Releasedの間に何らかの矛盾がありますか、それとも別の問題ですか?

答えて

0

マウスをドラッグしたとき(つまり、ボタンを押し下げたとき)に検出しようとしていると思います。 pressedあなた自身の旗を追跡する必要はありません。基本的なイベントシステムがこれを行います。

activePane.setOnMousePressed((MouseEvent me) -> { 
    startX = me.getX(); 
    startY = me.getY(); 
    move = new MoveTo(me.getX(), me.getY());    
    path.getElements().add(move); 
}); 
activePane.setOnMouseReleased((MouseEvent me) -> { 
    line = new LineTo(me.getX(), me.getY());   
    path.getElements().add(line); 
}); 
activePane.setOnMouseDragged((MouseEvent me) -> { 
    activePane.getChildren().clear(); 
    Line temporaryLine = new Line(startX, startY, me.getX(), me.getY()); 
    activePane.getChildren().add(temporaryLine); 
});  
+0

ありがとう、私はこのイベントについて全く知らなかった –

関連する問題