如何阻止透明填充圆在其中获取鼠标事件?
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 中不再有效,但在您的情况下,您可以将圆的填充设置为空。这应该有相同的效果。
我希望 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 中不再有效,但在您的情况下,您可以将圆的填充设置为空。这应该有相同的效果。