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。这应该有同样的效果。哇!我知道有一个更好的主意。多酷啊!谢谢。