在 JavaFX 中是否有避免嵌套事件的巧妙方法?

Is there a clever way of avoiding nested events in JavaFX?

我有一个要按以下方式缩放的形状:

  1. 用户将鼠标移到形状上
  2. 他们点击 Control 键
  3. 他们使用鼠标滚动相应地放大和缩小。

这就是我解决这个问题的方法:(我不包括我的方法的实现作为唯一的想法,而不是实际的实现,是这个问题的主题):

public void addScaling(Shape shape)
{
    shape.setOnMouseEntered(e ->
    {
        (shape.getScene()).setOnKeyPressed(e2 ->
            shape.setOnScroll(e3 -> scalingMethod())
    }

    shape.setOnMouseExited(e -> 
    {
        (shape.getScene()).setOnKeyPressed(null);
        shape.setOnScroll(null);
    }
}

但是,我对这段代码并不满意——它看起来很糟糕。
有没有更好的方法来解决这个问题?

据我所知,除非鼠标悬停在节点上,否则不会在节点上触发滚动事件。所以你只需要

shape.setOnScroll(e -> {
    if (e.isControlDown()) {
        scalingMethod();
    }
});

如果您确实需要检查鼠标是否在形状上,请执行

shape.setOnScroll(e -> {
    if (e.isControlDown() && shape.isHover()) {
        scalingMethod();
    }
});