鼠标焦点缩放图表

时间:2014-03-18 08:41:02

标签: javafx javafx-2 javafx-8

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

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

我注意到当我用鼠标滚轮滚动图表时,我无法缩放鼠标指向的图表。而不是将图表缩放到左侧或右侧。例如。

当我用鼠标滚轮缩放以缩放我的光标指向的图表时,我想要。有没有解决方案?

1 个答案:

答案 0 :(得分:0)

我没有和javafx合作过,但无论如何我都会尝试回答。根据我使用Win32Api / GDI和XNA的经验,你一定能够读取鼠标坐标。您显示的任何内容都显示在坐标x,y处。当你想缩放和缩放到光标的位置时,你会想到这一点重绘:(假设缩放系数= z,鼠标X和鼠标Y鼠标坐标X和Y新坐标)
你的光标必须指向同一个像素,所以如果图像现在是z倍,那么鼠标坐标相对于图像的来源也是如此。对于这些坐标,基本上是图像顶部和左侧的距离,您必须添加源本身的坐标,该坐标应相对于窗口的左上角保持不变。这最终意味着mouseX - X =(mouseX - x)* z,这意味着X = mouseX - (mouseX - x)* z
Y坐标也是如此。理论上这应该是完美的,我没有尝试过代码,但它似乎在纸面上。您会注意到X和Y似乎变得越来越小,实际上它们甚至可能变为负值,因为通过缩放并将鼠标保持在同一个像素上,您可以进一步向上和向左推动/拉伸左上角,可能在屏幕外。
你可能会使用滚动条,它们的位移也是一样的 稍微使用变量使它们适合绘图模式,我不知道你正在使用的库是从屏幕的(0,0),窗口还是工作区域开始,所以你必须使其适应代码的其余部分,但这是它背后的数学/几何。