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
可以实现这一点,而无需找到解决方法。