我试图使用陈旧的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价格等。
我显然遗漏了一些东西,但是没有看到关于这个问题的任何正常解释,也许你可以指导我阅读和学习的教程/文档。 不是寻找一个神奇的解决方案(但一个可以是好的),但更多的地方可以了解我在这个领域的误解。
感谢。
答案 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烛台图表实现上成功使用了此代码的类似版本进行平移/滚动(使用拖动事件而不是滑块,但数学应该保持不变)