在鼠标焦点中缩放图表



我有一个自定义图表,我使用以下代码缩放:

final double SCALE_DELTA = 1.1;
        treePane.setOnScroll(new EventHandler<ScrollEvent>()
        {
            @Override
            public void handle(ScrollEvent event)
            {
                event.consume();
                if (event.getDeltaY() == 0)
                {
                    return;
                }
                double scaleFactor = (event.getDeltaY() > 0) ? SCALE_DELTA : 1 / SCALE_DELTA;
                treePane.setScaleX(treePane.getScaleX() * scaleFactor);
                treePane.setScaleY(treePane.getScaleY() * scaleFactor);
            }
        });

我注意到,当我用鼠标滚轮滚动图表时,我不能在鼠标指向的地方缩放图表。与此相反,图表被向左或向右缩放。

我想当我用鼠标滚轮缩放我光标所指的图表时。有解决办法吗?

我没有使用过javafx,但我将尝试回答。从我使用Win32Api/GDI和XNA的经验来看,你绝对应该能够读取鼠标坐标。你显示的任何东西都显示在坐标x,y上。当你想缩放和缩放到光标的位置时,你要记住这一点重新绘制:(假设缩放因子= z, mouseX和mouseY鼠标坐标X和Y为新坐标)
你的光标必须指向相同的像素,所以如果图像现在变大了z倍,那么相对于图片的源,鼠标坐标也会变大。对于这些坐标(本质上是从图像的顶部和左侧的距离),您必须添加源本身的坐标,相对于窗口的左上角,它应该保持不变。这最终意味着mouseX - X = (mouseX - X)*z,这意味着X = mouseX - (mouseX - X)*z
Y坐标也是一样。从理论上讲,这应该是完美的,我没有尝试过它与代码,但它似乎是正确的纸上。你会注意到X和Y似乎变得越来越小,本质上它们甚至可能变成负值,因为通过缩放并将鼠标保持在相同的像素上,你将左上角进一步向上和向左推/拉伸,可能超出屏幕。
你可能会使用滚动条,同样的原理在他们的位移。
玩变量一点,使它们适合绘图模式,我不知道你正在使用的库是否从屏幕的(0,0)开始,或者窗口的,或者工作区域,所以你必须使它适应其余的代码,但这是它背后的数学/几何

最新更新