我想避免在 javafx 8 中由子处理程序和父处理程序处理的鼠标单击事件
I want to avoid Mouse click event handled by both child and parent handlers in javafx 8
目前在我的 javafx 程序中我有这样的结构
AnchorPane[Parent] -> Group[Child] ... 都有 setOnMouseClicked 事件代码..
我的问题是点击子节点时,先执行子节点的setOnMouseClicked,然后执行父节点的setOnMouseClicked ...
现在我想拥有
这样的功能
- 如果子节点的setOnMouseClicked被执行则
- 不应执行父节点的 setOnMouseClicked ..
我该如何实现?欲了解更多信息,请查看下图。
- 现在如果我点击父节点 -> selected 子节点应该被 deselected .. 所以我写父节点 Node.setOnMouseClicked -> de-select 子节点..
- 但即使我点击子节点select它->它也执行父节点的setOnMouseClicked->并立即deselect子节点..
我发现这个问题是架构问题,所以不发布代码示例。
请让我知道您的宝贵建议。非常感谢您的帮助。
这是一个消费事件的小例子 - 已经消费的事件不会冒泡到下一个侦听器:
@Override
public void start(Stage stage) throws Exception {
Canvas c = new Canvas(400, 400);
Pane p = new Pane(c);
p.setOnMouseClicked(me -> {
System.out.println("Pane mouse click: " + me.getX() + ", " + me.getY());
});
c.setOnMouseClicked(me -> {
System.out.println("Canvas mouse click: " + me.getX() + ", " + me.getY());
if (me.getX()>200) {
System.out.println("Consuming event");
me.consume();
}
});
stage.setScene(new Scene(p));
stage.show();
}
当点击左侧部分然后点击右侧部分时 Canvas
你会得到这样的东西:
Canvas mouse click: 96.0, 174.0
Pane mouse click: 96.0, 174.0
Canvas mouse click: 373.0, 180.0
Consuming event
注意第二次 Pane
事件侦听器没有被执行。当然,你可以使用任何逻辑来决定是否消费该事件。
目前在我的 javafx 程序中我有这样的结构
AnchorPane[Parent] -> Group[Child] ... 都有 setOnMouseClicked 事件代码..
我的问题是点击子节点时,先执行子节点的setOnMouseClicked,然后执行父节点的setOnMouseClicked ...
现在我想拥有
这样的功能- 如果子节点的setOnMouseClicked被执行则
- 不应执行父节点的 setOnMouseClicked ..
我该如何实现?欲了解更多信息,请查看下图。
- 现在如果我点击父节点 -> selected 子节点应该被 deselected .. 所以我写父节点 Node.setOnMouseClicked -> de-select 子节点..
- 但即使我点击子节点select它->它也执行父节点的setOnMouseClicked->并立即deselect子节点..
我发现这个问题是架构问题,所以不发布代码示例。
请让我知道您的宝贵建议。非常感谢您的帮助。
这是一个消费事件的小例子 - 已经消费的事件不会冒泡到下一个侦听器:
@Override
public void start(Stage stage) throws Exception {
Canvas c = new Canvas(400, 400);
Pane p = new Pane(c);
p.setOnMouseClicked(me -> {
System.out.println("Pane mouse click: " + me.getX() + ", " + me.getY());
});
c.setOnMouseClicked(me -> {
System.out.println("Canvas mouse click: " + me.getX() + ", " + me.getY());
if (me.getX()>200) {
System.out.println("Consuming event");
me.consume();
}
});
stage.setScene(new Scene(p));
stage.show();
}
当点击左侧部分然后点击右侧部分时 Canvas
你会得到这样的东西:
Canvas mouse click: 96.0, 174.0
Pane mouse click: 96.0, 174.0
Canvas mouse click: 373.0, 180.0
Consuming event
注意第二次 Pane
事件侦听器没有被执行。当然,你可以使用任何逻辑来决定是否消费该事件。