Mohasin Mujawar
Mohasin Mujawar

Reputation: 130

Find Solution : Javafx : Bind Multiple Mouse Event on Scene

I am trying to bind two separate event to scene in javafx .

    scene.addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<Event>() {
            @Override
            public void handle(Event event) {
           ......Drag Content Task.......
}
});

So How can get this two Events any Suggestion.

scene.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                if(event.getClickCount() == 2){
                    System.out.println("Call Dbl Click Eve");
                  Zooming....Task.....
}
});

I wrote some code and it works for me ! Using Current Time calculate time betwwen two click events if it less than dblclick expected then consider double click..

scene.addEventHandler(MouseEvent.ANY, e -> {   
if (e.getEventType().equals(MouseEvent.DRAG_DETECTED)) {
            System.out.println("Drag Event call ");
            drag_Flag=true;
            }
            if (e.getEventType().equals(MouseEvent.MOUSE_RELEASED) && drag_Flag) {
            System.out.println("Rellease Event call");
            drag_Flag=false;
            System.out.println("Drag Event Flag : "+drag_Flag);
            time1=0;
            time2=0;
        } else if (e.getEventType().equals(MouseEvent.MOUSE_CLICKED) && !drag_Flag) {
                long diff = 0;
            if(time1==0)
             time1=System.currentTimeMillis();
            else
            time2=System.currentTimeMillis();
            if(time1!=0 && time2!=0)
            diff=time2-time1;
                if((diff/1000)<=215 && diff>0)
            {
                isdblClicked=true;
            }
            else
            {
                isdblClicked=false;
            }

            System.out.println("IsDblClicked()"+isdblClicked);

            if(isdblClicked==true)
            {
            ZoomInOutPojo z = null;
                do_Zoom();
                time1=time2=0;
                isdblClicked=false;

            }
            else
            {
                statement1;
            }

            }
                drag_Flag=false;
        }

    });

Upvotes: 1

Views: 910

Answers (3)

Mohasin Mujawar
Mohasin Mujawar

Reputation: 130

Solution Works for My Case.

 static boolean drag_Flag=false
scene.addEventHandler(MouseEvent.ANY, e -> {
        if (e.getEventType().equals(MouseEvent.DRAG_DETECTED)) {
            System.out.println("Drag Event call ");
            drag_Flag=true;
}
 if (e.getEventType().equals(MouseEvent.MOUSE_RELEASED) && drag_Flag) {
            System.out.println("Rellease Event call");


            drag_Flag=false;
            System.out.println("Drag Event Flag : "+drag_Flag);
            time1=0;
            time2=0;

        } else if (e.getEventType().equals(MouseEvent.MOUSE_CLICKED) && !drag_Flag) {
                long diff = 0;
            if(time1==0)
             time1=System.currentTimeMillis();
            else
            time2=System.currentTimeMillis();
            if(time1!=0 && time2!=0)
            diff=time2-time1;
            if((diff/1000)<=215 && diff>0)
            {
                isdblClicked=true;
            }
            else
            {
                isdblClicked=false;
            }

            System.out.println("IsDblClicked()"+isdblClicked);

            if(isdblClicked==true)
            {
            ZoomInOutPojo z = null;
                do_Zoom();
                time1=time2=0;
                isdblClicked=false;
            }
            else
            {
                statement1;
            }

            }

            drag_Flag=false;
        }

    });

Upvotes: 1

Venkat Prasanna
Venkat Prasanna

Reputation: 732

You can use the following code too. Try it.

 EventHandler<MouseEvent> clickEvent = new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
             if(event.getClickCount() == 2){
                    System.out.println("Call Dbl Click Eve");
             }
        }
    };

    EventHandler<MouseEvent> releaseEvent = new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            System.out.println("Rele");
        }
    };

    scene.addEventHandler(MouseEvent.MOUSE_CLICKED, clickEvent);
    scene.addEventHandler(MouseEvent.MOUSE_RELEASED, releaseEvent);

I hope it will help you.

Upvotes: 0

oszd93
oszd93

Reputation: 193

Well the way you posted it should already work, another way to do it would be:

scene.addEventHandler(MouseEvent.ANY, e -> {
        if (e.getEventType().equals(MouseEvent.MOUSE_RELEASED)) {
            // do something
        } else if (e.getEventType().equals(MouseEvent.MOUSE_CLICKED)) {
            // do something else
        }
    });

Upvotes: 0

Related Questions