如何阻止透明填充圆在其中获取鼠标事件?

How to stop a transparent-fill circle getting mouse events inside it?

我希望 Circle 仅当鼠标位于 'stroke' 上时才响应鼠标事件,我的意思是边界。当然,圆形有透明填充和彩色描边。扩展 JavaFX Path 对我来说看起来很痛苦,有什么办法可以用这个 Circle class?

此解决方案不适用于 Java 9: 好的,最后我找到了一个很好的方法来做到这一点。将来可能会对其他人有所帮助:

javafx.scene.shape.Shape class 有一个已弃用的方法

boolean impl_computeContains(double localX, double localY)

调用另一个方法computeShapeContains(localX, localY, impl_configShape())

现在,场景图通过

决定一个点是否在形状中

boolean contains(double localX, double localY) 来自 JavaFX.scene.Node 的方法调用了 impl_computeContains 方法。所以我看了一下那些方法并像这样覆盖了 impl_computeContains 方法:

@Override
    protected boolean impl_computeContains(double localX, double localY) {
        float miterlimit =
            (float) Utils.clampMin(getStrokeMiterLimit(), 1.0f);
        return Toolkit.getToolkit().strokeContains(impl_configShape(), localX, localY, getStrokeType(), 
                Utils.clampMin(getStrokeWidth(), 0.0f), getStrokeLineCap(), getStrokeLineJoin(), miterlimit);
    }

繁荣!!有用!!我所做的只是,我删除了如果点位于形状的内部部分则执行该操作的部分。

您的解决方案在 Java9 中不再有效,但在您的情况下,您可以将圆的填充设置为空。这应该有相同的效果。