2016-03-24 8 views
0

Ich versuche ein Fenster in meinem Programm zum Zeichnen von Linien mit einer Maus zu schreiben. Ich habe bisher mit dieser Lösung kommen:javaFX, zwei MausEreignisse gleichzeitig

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(); 
    }  
} 

Aber, wie ich beobachtet habe, die temporäre Linie nicht gezogen wird, wenn Maustaste gedrückt wird. Gibt es eine Art Konflikt zwischen den Ereignissen MousePressed und Mouse Released oder ist das Problem woanders?

Antwort

0

Ich denke, Sie versuchen zu erkennen, wenn die Maus gezogen wird (d. H. Wenn es mit der Taste nach unten bewegt wird). Sie müssen die pressed Flagge nicht selbst verfolgen, das zugrundeliegende Ereignissystem wird dies für Sie tun.

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

Vielen Dank, ich wusste überhaupt nichts über diese Veranstaltung –