0

我试图使用旧的 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 的价格等。

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

谢谢。

4

1 回答 1

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

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

于 2015-09-20T14:12:15.403 回答