Reputation: 130
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
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
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
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