Javafx 如何阻止透明填充圈将鼠标事件放入其中?

Javafx 如何阻止透明填充圈将鼠标事件放入其中?,javafx,mouse,shape,fill,stroke,Javafx,Mouse,Shape,Fill,Stroke,我想要一个圆圈仅当鼠标位于其“笔划”(我指的是边界)上时才响应鼠标事件。当然,圆有透明的填充和彩色的笔划。扩展JavaFX路径对我来说似乎很痛苦,有没有办法用这个Circle类来做到这一点?这个解决方案不适用于Java 9: 好的,我终于找到了一个很好的方法。它可能会在未来帮助他人: javafx.scene.shape.shape类有一个不推荐使用的方法 boolean impl\u computeContains(双localX,双localY) 它调用另一个方法计算hapecontains

我想要一个
圆圈
仅当鼠标位于其“笔划”(我指的是边界)上时才响应鼠标事件。当然,圆有透明的填充和彩色的笔划。扩展
JavaFX路径对我来说似乎很痛苦,有没有办法用这个
Circle
类来做到这一点?

这个解决方案不适用于Java 9: 好的,我终于找到了一个很好的方法。它可能会在未来帮助他人:

javafx.scene.shape.shape
类有一个不推荐使用的方法

boolean impl\u computeContains(双localX,双localY)

它调用另一个方法
计算hapecontains(localX、localY、impl\u configShape())

现在,场景图决定一个点是否在形状中

boolean contains(double localX,double localY)
JavaFX.scene.Node中调用impl\u 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);
    }

砰的一声!!它起作用了!!我所做的只是,我移除了一个部分,如果该点位于形状的内部部分,那么该执行什么操作

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

哇!我知道有一个更好的主意。多酷啊!谢谢。