相关疑难解决方法(0)

JavaFx 8 - 相对于鼠标位置缩放/缩放ScrollPane

我需要相对于鼠标位置放大/缩小滚动窗格.

我目前通过将我的内容包装在一个组中,并缩放组本身来实现缩放功能.我使用自定义数据透视创建一个新的Scale对象.(枢轴设置为鼠标位置)

这适用于组的初始比例为1.0的情况,但之后的缩放不会在正确的方向上缩放 - 我相信这是因为当缩放组时相对鼠标位置会发生变化.

我的代码:

@Override
public void initialize(URL location, ResourceBundle resources) {

    Delta initial_mouse_pos = new Delta();

    anchorpane.setOnScrollStarted(event -> {
        initial_mouse_pos.x = event.getX();
        initial_mouse_pos.y = event.getY();
    });

    anchorpane.setOnScroll(event -> {
        double zoom_fac = 1.05;
        double delta_y = event.getDeltaY();

        if(delta_y < 0) {
            zoom_fac = 2.0 - zoom_fac;
        }

        Scale newScale = new Scale();
        newScale.setPivotX(initial_mouse_pos.x);
        newScale.setPivotY(initial_mouse_pos.y);
        newScale.setX( content_group.getScaleX() * zoom_fac );
        newScale.setY( content_group.getScaleY() * zoom_fac );

        content_group.getTransforms().add(newScale);

        event.consume();
    });
}

private class Delta { double x, y; }
Run Code Online (Sandbox Code Playgroud)

如何在不同的缩放级别获得正确的鼠标位置?是否有一种完全不同的方式来缩放ScrollPane更容易?

java javafx zoom scrollpane javafx-8

7
推荐指数
1
解决办法
5984
查看次数

标签 统计

java ×1

javafx ×1

javafx-8 ×1

scrollpane ×1

zoom ×1