代码之家  ›  专栏  ›  技术社区  ›  Muzib hardyVeles

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

  •  2
  • Muzib hardyVeles  · 技术社区  · 7 年前

    我想要一个 Circle 只有当鼠标在“笔划”上时才对鼠标事件做出响应,我指的是边界。当然,这个圆有一个透明的填充和一个彩色的笔划。扩展 JavaFX Path 我觉得很痛苦,有什么办法吗 圆圈

    2 回复  |  直到 7 年前
        1
  •  2
  •   mipa    7 年前

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

        2
  •  0
  •   Muzib hardyVeles    7 年前

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

    javafx.scene.shape.Shape 类具有已弃用的方法

    boolean impl_computeContains(double localX, double localY)

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

    现在,场景图通过

    boolean contains(double localX, double localY) 方法。场景调用impl\u computeContains方法的节点。所以我看了一下这些方法,并重写了impl\u 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);
        }
    

    然后砰!!它有效!!我所做的只是,我删除了一个部分,该部分实现了如果点位于形状的内部部分,该怎么办。