Skip to Main Content

Getting the mouse drag release event on a canvas ?

3422412Mar 27 2017 — edited Apr 4 2017

I have scene consisting of a single canvas. I'm using the canvas context to draw graphics on. I'm tracking the mouse location for input. Everything is working fine but I can't get the mouse drag release event to respond. I'm using the mouse press / release events to track button pushes. The standard press / release mouse events respond fine but after performing a drag the mouse drag release never happens.

Here is the function for my mouse events. It should print "drag release" but the mouse drag release event isn't happening.

private void startMouseInput(){

      

        scene.addEventFilter(MouseEvent.MOUSE_MOVED, new EventHandler<MouseEvent>() {

                   @Override

                   public void handle(MouseEvent event) {

                   mouse.lastLocation.set( event.getX() , event.getSceneY() );

                   event.consume();

                   }

         });

        scene.addEventFilter(MouseEvent.DRAG_DETECTED , new EventHandler<MouseEvent>() {

                   @Override

                   public void handle(MouseEvent event) {

        

                    scene.setCursor(Cursor.DEFAULT);

                    Dragboard db = scene.startDragAndDrop(TransferMode.ANY);

                    /* Put a string on a dragboard */

                    ClipboardContent content = new ClipboardContent();

                    content.putString("test");

                    db.setContent(content);

                    //mouse.lastLocation.set( event.getX() , event.getSceneY() );

                    scene.startFullDrag();

        

                    event.consume();

        

        

                   }

         });

        scene.addEventFilter(DragEvent.DRAG_OVER, new EventHandler<DragEvent>() {

                   @Override

                   public void handle(DragEvent event) {

                   mouse.lastLocation.set( event.getX() , event.getSceneY() );

                   event.consume();

                   }

        });

      

        scene.addEventFilter(MouseDragEvent.MOUSE_DRAG_RELEASED, new EventHandler<MouseDragEvent>() {

                   @Override

                   public void handle(MouseDragEvent event) {

                   System.out.println("drag release");

                   mouse.lastLocation.set( event.getX() , event.getSceneY() );

                   event.consume();

                   }

        });

      

        scene.addEventFilter(ScrollEvent.SCROLL, new EventHandler<ScrollEvent>() {

            @Override

            public void handle(ScrollEvent event) {

               for (MouseKey key : mouse.getKeys()) {

                         if (key.getTrigger() == MouseKeyTrigger.WHEEL){

                             ScrollEvent evt = (ScrollEvent)event;

                             key.setDelta(evt.getDeltaY());

                             mouse.fireMouseWheel( evt.getDeltaX() , evt.getDeltaY() );

                         }

               }

               event.consume();

            }

    });

       

         scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

                   @Override

                   public void handle(MouseEvent event) {

                     for (MouseKey key : mouse.getKeys()){

                         if (event.getButton() ==  MouseButton.PRIMARY){

                             if (key.getTrigger() == MouseKeyTrigger.BUTTON1){

                                  key.triggered(true);

                             }

                         } else if (event.getButton() ==  MouseButton.SECONDARY){

                             if (key.getTrigger() == MouseKeyTrigger.BUTTON2){

                                  key.triggered(true);

                             }

                         } else if (event.getButton() ==  MouseButton.MIDDLE){

                             if (key.getTrigger() == MouseKeyTrigger.BUTTON3){

                                  key.triggered(true);

                             }

                         }

                     }

                     event.consume();

                   }

         });

       

         scene.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {

         @Override public void handle(MouseEvent event) {

                    for (MouseKey key : mouse.getKeys()){

                         if (event.getButton() ==  MouseButton.PRIMARY){

                             if (key.getTrigger() == MouseKeyTrigger.BUTTON1){

                                  key.triggered(false);

                             }

                         } else if (event.getButton() ==  MouseButton.SECONDARY){

                             if (key.getTrigger() == MouseKeyTrigger.BUTTON2){

                                  key.triggered(false);

                             }

                         } else if (event.getButton() ==  MouseButton.MIDDLE){

                             if (key.getTrigger() == MouseKeyTrigger.BUTTON3){

                                  key.triggered(false);

                             }

                         }

                         event.consume();

                  }

      }

    });

       

    }

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked due to inactivity on May 2 2017
Added on Mar 27 2017
3 comments
2,120 views