查找解决方案:Javafx:在场景中绑定多个鼠标事件

查找解决方案:Javafx:在场景中绑定多个鼠标事件,javafx,Javafx,我试图将两个独立的事件绑定到javafx中的场景 scene.addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<Event>() { @Override public void handle(Event event) { ......Drag Content Task....... } }); scene.addEventHandler

我试图将两个独立的事件绑定到javafx中的场景

    scene.addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<Event>() {
            @Override
            public void handle(Event event) {
           ......Drag Content Task.......
}
});
scene.addEventHandler(MouseEvent.MOUSE_发布,新事件处理程序(){
@凌驾
公共无效句柄(事件){
……拖动内容任务。。。。。。。
}
});
那么如何才能得到这两个事件的任何建议

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.....
}
});
scene.addEventHandler(MouseEvent.MOUSE_单击,新建EventHandler()){
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getClickCount()==2){
System.out.println(“调用Dbl单击Eve”);
缩放…任务。。。。。
}
});
我写了一些代码,它为我工作! 使用当前时间计算两次点击事件的时间,如果小于dBLCKET预期,则考虑双击.

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

    });
scene.addEventHandler(MouseEvent.ANY,e->{
if(e.getEventType().equals(MouseEvent.DRAG_检测到)){
System.out.println(“拖动事件调用”);
drag_Flag=true;
}
if(e.getEventType().equals(MouseEvent.MOUSE_RELEASED)&&drag_标志){
System.out.println(“重新释放事件调用”);
drag_Flag=false;
System.out.println(“拖动事件标志:“+拖动标志”);
time1=0;
时间2=0;
}else if(e.getEventType().equals(MouseEvent.MOUSE_CLICKED)&&!drag_标志){
长差=0;
如果(时间1==0)
time1=System.currentTimeMillis();
其他的
time2=System.currentTimeMillis();
if(time1!=0&&time2!=0)
差异=时间2-1;
如果((差值/1000)0)
{
isdbl=true;
}
其他的
{
isdbl=false;
}
System.out.println(“IsDblClicked()”+IsDblClicked);
if(isdblClicked==true)
{
ZoomInOutPojo z=null;
dou_Zoom();
time1=time2=0;
isdbl=false;
}
其他的
{
声明1;
}
}
drag_Flag=false;
}
});

您发布它的方式应该已经起作用了,另一种方式是:

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

您也可以使用以下代码。试试看

 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);
EventHandler clickEvent=neweventhandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getClickCount()==2){
System.out.println(“调用Dbl单击Eve”);
}
}
};
EventHandler releaseEvent=新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
系统输出打印项次(“Rele”);
}
};
scene.addEventHandler(MouseEvent.MOUSE_点击,点击事件);
scene.addEventHandler(MouseEvent.MOUSE_RELEASED,releasevent);
我希望它能帮助你

这个解决方案适合我的情况

static boolean drag\u Flag=false
场景。addEventHandler(MouseEvent.ANY,e->{
if(e.getEventType().equals(MouseEvent.DRAG_检测到)){
System.out.println(“拖动事件调用”);
drag_Flag=true;
}
if(e.getEventType().equals(MouseEvent.MOUSE_RELEASED)&&drag_标志){
System.out.println(“重新释放事件调用”);
drag_Flag=false;
System.out.println(“拖动事件标志:“+拖动标志”);
time1=0;
时间2=0;
}else if(e.getEventType().equals(MouseEvent.MOUSE_CLICKED)&&!drag_标志){
长差=0;
如果(时间1==0)
time1=System.currentTimeMillis();
其他的
time2=System.currentTimeMillis();
if(time1!=0&&time2!=0)
差异=时间2-1;
如果((差值/1000)0)
{
isdbl=true;
}
其他的
{
isdbl=false;
}
System.out.println(“IsDblClicked()”+IsDblClicked);
if(isdblClicked==true)
{
ZoomInOutPojo z=null;
dou_Zoom();
time1=time2=0;
isdbl=false;
}
其他的
{
声明1;
}
}
drag_Flag=false;
}
});

@oszd93:好的,很好。我知道方法,但问题是鼠标释放,鼠标点击事件同时触发,所以我如何将它们分开…比如双击使一些扩散你能更具体一点吗?@oszd93:-)当然。我有一个场景,我放置了可拖动的Hbox。现在,当我拖动hbox时,我想用它绑定事件。hbox应该移动一个事件…同一场景中的另一个事件单击缩放hbox内容。我发布的解决方案应该可以。只需将释放的MouseEvent.MOUSE_替换为检测到的MouseEvent.DRAG_,然后您就可以处理dragevent和mouseclick了
 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;
        }

    });