JavaFX 2事件调度到基础节点

Nik*_*Nik 5 java javafx event-handling javafx-2

有没有正确的方法来解决两个兄弟窗格之间的事件传播问题?

例如,我们的StackPane内部有2个窗格。

StackPane p = new StackPane();
Region p1 = new Region();
Region p2 = new Region();
p.getChildren().addAll(p1, p2);
Run Code Online (Sandbox Code Playgroud)

在此示例中,p2捕获了鼠标事件,即使未消耗事件,p1也无法对此做出反应。

如果p2未使用事件,是否有正确的方法将事件传播到p1?

setMouseTransparent无法解决我的问题,因为我需要两个子元素都对鼠标做出反应。

感谢您的指教。

Nik*_*Nik 0

我的问题得到了部分解决。也许我不太正确地提出问题。我编写像图形编辑器这样的应用程序,并在堆栈窗格上有工具层窗格,其中包含指南、网格、选择工具等,并且需要该层的子层可以处理鼠标,并且窗格本身对于鼠标事件将是透明的。

问题是通过覆盖 pickNode 解决的,不是在公共 API 中,但它可以工作。也许可以帮助某人。

protected Node impl_pickNodeLocal(double localX, double localY) {
    if (containsBounds(localX, localY)) {
        ObservableList<Node> children = getChildren();
        for (int i = children.size()-1; i >= 0; i--) {
            Node picked = children.get(i).impl_pickNode(localX, localY);
            if (picked != null) return picked;
        }
        // hack to make pane itself transparent for mouse
        // if (contains(localX, localY)) return this;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)