2016-03-24 2 views
0

Я пытаюсь написать окно в своей программе для рисования линий с помощью мыши. Я пришел с этим решением до сих пор:javaFX, два 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(); 
    }  
} 

Однако, как я заметил, временная линия не рисуется при нажатии кнопки мыши. Есть ли какой-то конфликт между событиями MousePressed и Mouse 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

Большое спасибо, я вообще не знал об этом событии –

Смежные вопросы