2014-12-06 97 views
0

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

我的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的价格等。

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

谢谢。

回答

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阴阳烛图实施平移/滚动(使用拖放事件,而不是一个滑块,但数学应该保持不变)