Events Javafx-子节点和父节点鼠标事件

Events Javafx-子节点和父节点鼠标事件,events,javafx,parent,nodes,Events,Javafx,Parent,Nodes,我有一个较大的窗格(父窗格),我在其中添加了另一个较小的窗格(子窗格)。我希望在不拖动父窗格的情况下拖动子窗格(即,仅在子窗格上注册鼠标事件,而不在父窗格上注册鼠标事件)。 我们如何才能最好地实施它?我设法找到了解决问题的办法 在父窗格中:我使用了mouseEvent.isControlDown()-因此我使用crtl+mousebutton向下拖动窗格 在子窗格中:我使用了!mouseEvent.isControlDown()。因此,控件keystke用于确定事件的哪一部分起作用 家长会这样做

我有一个较大的窗格(父窗格),我在其中添加了另一个较小的窗格(子窗格)。我希望在不拖动父窗格的情况下拖动子窗格(即,仅在子窗格上注册鼠标事件,而不在父窗格上注册鼠标事件)。
我们如何才能最好地实施它?

我设法找到了解决问题的办法

在父窗格中:我使用了mouseEvent.isControlDown()-因此我使用crtl+mousebutton向下拖动窗格

在子窗格中:我使用了!mouseEvent.isControlDown()。因此,控件keystke用于确定事件的哪一部分起作用

家长会这样做:

        node.addEventFilter(
            MouseEvent.MOUSE_PRESSED,
            new EventHandler<MouseEvent>() {
                public void handle(final MouseEvent mouseEvent) {
                    if (mouseEvent.isControlDown()) {

                        // remember initial mouse cursor coordinates
                        // and node position
                        dragContext.mouseAnchorX = mouseEvent.getSceneX();
                        dragContext.mouseAnchorY = mouseEvent.getSceneY();
                        dragContext.initialTranslateX
                        = node.getTranslateX();
                        dragContext.initialTranslateY
                        = node.getTranslateY();
                    }
                }
            });
    node.addEventFilter(
            MouseEvent.MOUSE_PRESSED,
            new EventHandler<MouseEvent>() {
                public void handle(final MouseEvent mouseEvent) {
                    if (!mouseEvent.isControlDown()) {
                        dragContext.mouseAnchorX = mouseEvent.getSceneX();
                        dragContext.mouseAnchorY = mouseEvent.getSceneY();
                        dragContext.initialTranslateX
                        = node.getTranslateX();
                        dragContext.initialTranslateY
                        = node.getTranslateY();
                    }
                }
            });
node.addEventFilter(
MouseEvent.MOUSE_按下,
新的EventHandler(){
公共无效句柄(最终MouseEvent MouseEvent){
if(mouseEvent.isControlDown()){
//记住鼠标光标的初始坐标
//和节点位置
dragContext.mouseAnchorX=mouseEvent.getSceneX();
dragContext.mouseAnchorY=mouseEvent.getSceneY();
dragContext.initialTranslateX
=node.getTranslateX();
dragContext.initialTranslateY
=node.getTranslateY();
}
}
});
孩子是这样的:

        node.addEventFilter(
            MouseEvent.MOUSE_PRESSED,
            new EventHandler<MouseEvent>() {
                public void handle(final MouseEvent mouseEvent) {
                    if (mouseEvent.isControlDown()) {

                        // remember initial mouse cursor coordinates
                        // and node position
                        dragContext.mouseAnchorX = mouseEvent.getSceneX();
                        dragContext.mouseAnchorY = mouseEvent.getSceneY();
                        dragContext.initialTranslateX
                        = node.getTranslateX();
                        dragContext.initialTranslateY
                        = node.getTranslateY();
                    }
                }
            });
    node.addEventFilter(
            MouseEvent.MOUSE_PRESSED,
            new EventHandler<MouseEvent>() {
                public void handle(final MouseEvent mouseEvent) {
                    if (!mouseEvent.isControlDown()) {
                        dragContext.mouseAnchorX = mouseEvent.getSceneX();
                        dragContext.mouseAnchorY = mouseEvent.getSceneY();
                        dragContext.initialTranslateX
                        = node.getTranslateX();
                        dragContext.initialTranslateY
                        = node.getTranslateY();
                    }
                }
            });
node.addEventFilter(
MouseEvent.MOUSE_按下,
新的EventHandler(){
公共无效句柄(最终MouseEvent MouseEvent){
如果(!mouseEvent.isControlDown()){
dragContext.mouseAnchorX=mouseEvent.getSceneX();
dragContext.mouseAnchorY=mouseEvent.getSceneY();
dragContext.initialTranslateX
=node.getTranslateX();
dragContext.initialTranslateY
=node.getTranslateY();
}
}
});

我相当肯定,只向您的子窗格添加一个
EventHandler
可以实现这一点,而无需找到解决方法。