JAVAFX - 用滑块控制candleStick图表

时间:2014-12-06 13:53:31

标签: charts javafx slider candlestick-chart

我试图使用陈旧的JAVA-FX烛台图表,并且遇到一些麻烦。 当我尝试用我附加的滑块重新调整我的图表大小时,由于某种原因,蜡烛开始变大(变厚)或变得非常小(变薄)。

我的sliderX是一个带有数据信息的滑块,将最小值设置为最小日期(1),最大值设置为最大日期。

我有以下代码作为我的滑块的监听器:

    sliderX.valueProperty().addListener(new ChangeListener<Number>() {
        public void changed(ObservableValue<? extends Number> ov,
            Number oldValue, Number newValue) {
                xAxis.setLowerBound(newValue.doubleValue());
                xAxis.setUpperBound(newValue.doubleValue() + 100);
                xAxis.setTickMarkVisible(true);
                chart.updateAxisRange();
        }

这个想法是每次向前看100天,并以+100间隔移动数据。 所以在开始时图表将显示0-100价格,只需点击左侧的滑块,他将显示1-101价格等。

我显然遗漏了一些东西,但是没有看到关于这个问题的任何正常解释,也许你可以指导我阅读和学习的教程/文档。 不是寻找一个神奇的解决方案(但一个可以是好的),但更多的地方可以了解我在这个领域的误解。

感谢。

1 个答案:

答案 0 :(得分:0)

在过去的几天里,我一直在处理类似的问题,我找到了一个可以更好地帮助您在以下链接中调整代码的解决方案:https://community.oracle.com/message/11143490#11143490

我认为问题在于你在下边界和上边界都使用了newValue,它似乎调整了轴的可视区域,而不是左右平移/滚动。

您可以尝试这样实现:

sliderX.valueProperty().addListener(new ChangeListener<Number>() {
    public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) {

            Delta = newValue.doubleValue() - oldValue.doubleValue(); 

            xAxis.setLowerBound(xAxis.getLowerBound() + Delta);
            xAxis.setUpperBound(xAxis.getUpperBound() + Delta);
            xAxis.setTickMarkVisible(true);
            chart.updateAxisRange();
    }
}

我已经在JavaFX8烛台图表实现上成功使用了此代码的类似版本进行平移/滚动(使用拖动事件而不是滑块,但数学应该保持不变)