有没有人在JFreeChart中做过跟随鼠标的十字准线?

Dav*_*win 6 java jfreechart

我们使用JFreeChart来制作XY图,我们有一个功能请求来做一个与鼠标一起移动的十字准线,并突出显示最接近地映射到鼠标x值的数据点.您可以在Google财经中查看类似的示例 - http://www.google.com/finance?q=INDEXDJX:.DJI,INDEXSP:.INX,INDEXNASDAQ:.IXIC.

那些谷歌图表只突出显示当前值(我们希望这样做并显示十字准线),但它们显示了我们正在寻找的实时鼠标交互.

有什么优雅的建议吗?

谢谢.

Dav*_*win 5

我使用鼠标侦听器和 CrosshairOverlay 类来完成这项工作。度假旅行回来后,我将发布我的代码。结果不是太难。


对不起,我忘了这个!

首先,您要计算十字准线所在位置的 x、y 值。对我来说,我希望它沿着直线上的点移动,所以我计算了最接近的 x 值并使用该数据对作为 x, y。

然后我调用这个方法:

protected void setCrosshairLocation(double x, Double y) {
    Crosshair domainCrosshair;
    List domainCrosshairs = crosshairOverlay.getDomainCrosshairs();
    if (domainCrosshairs.isEmpty()) {
        domainCrosshair = new Crosshair();
        domainCrosshair.setPaint(BlueStripeColors.LIGHT_GRAY_C0);
        crosshairOverlay.addDomainCrosshair(domainCrosshair);
    }
    else {
        // We only have one at a time
        domainCrosshair = (Crosshair) domainCrosshairs.get(0);
    }
    domainCrosshair.setValue(x);

    if (y != null) {
        Crosshair rangeCrosshair;
        List rangeCrosshairs = crosshairOverlay.getRangeCrosshairs();
        if (rangeCrosshairs.isEmpty()) {
            rangeCrosshair = new Crosshair();
            rangeCrosshair.setPaint(BlueStripeColors.LIGHT_GRAY_C0);
            crosshairOverlay.addRangeCrosshair(rangeCrosshair);
        }
        else {
            // We only have one at a time
            rangeCrosshair = (Crosshair) rangeCrosshairs.get(0);
        }

        rangeCrosshair.setValue(y);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,crosshairOverlay 是 CrosshairOverlay 的一个实例。