目前在我的javafx程序中,我的结构类似于
AnchorPane [Parent] - > Group [Child] ...都有setOnMouseClicked事件代码..
我的问题是当点击子节点时,首先执行子节点的setOnMouseClicked,然后执行父节点的setOnMouseClicked ......
现在我的情况是我想拥有像
这样的功能我如何实现这一目标?有关详细信息,请查看下图。
我发现此问题是一个架构问题,因此不会发布代码示例。
请告诉我您宝贵的建议。非常感谢您的帮助。
答案 0 :(得分:3)
以下是消费事件的一个小例子 - 已消耗的事件不会冒泡到下一个侦听器:
@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
事件侦听器未执行的情况。当然,您可以使用任何逻辑来决定是否使用该事件。