有没有一种聪明的方法来避免JavaFX中的嵌套事件?

时间:2018-04-15 21:10:24

标签: java javafx keyboard-events

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

  1. 用户将鼠标移到形状上
  2. 他们点击控制键
  3. 他们使用鼠标滚动相应地向上和向下缩放。
  4. 这就是我解决这个问题的方法:(我不是将我方法的实现作为唯一的想法,而不是实际的实现,是这个问题的主题):

    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);
        }
    }
    

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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