【发布时间】:2018-11-08 18:00:45
【问题描述】:
我正在尝试使用 Javafx 实现条形图。如果我只绘制一次数据,图表就可以正常工作。但是当我更新数据并重新绘制图表时,X 轴刻度保持不变,而所有数据都正确更新。请检查以下图片。
这是按周绘制数据的正确图表
当我更新数据时,图表变成了
您可以看到数据已更新,但 X 轴未正确缩放。有趣的是,当我在不更改数据的情况下再次绘制图表时,X 轴变成了这样的正常状态。
代码如下:
private static void drawChart(int timeMode)
{
stayAvg = new XYChart.Series<String, Number>();
stayAvg.setName("Avg.Stay (mins)");
// add data to the dataset
if (timeMode == 1)
{
for (int i = firstWeek; i <= lastWeek; i++)
{
stayAvg.getData().add(new XYChart.Data<String, Number>(weeks[i], weeksTotalCount[i]));
}
}
else if (timeMode == 2)
{
for (int i = firstMonth; i <= lastMonth; i++)
{
stayAvg.getData().add(new XYChart.Data<String, Number>(months[i], monthsTotalCount[i]));
}
}
// display chart
Platform.runLater(new Runnable() {
@Override
public void run() {
// plot data sets to the chart
// Update UI here.
// set up tooltips when cursor hovers on bars
sbc.setData(FXCollections.observableArrayList(stayAvg));
stayAvg.getData().forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getYValue() + "\n" + d.getXValue());
Tooltip.install(d.getNode(), tip);
});
// sbc is a StackedBarChart
sbc.setTitle("Average Stay");
chart.setScene(scene);
}
});
}
【问题讨论】:
-
1) 这与 Swing 有什么关系? 2) 请学习常见的 Java 命名法(命名约定 - 例如
EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。 -
谢谢 Andrew,我以前没有关注 Java 命名法。我将编辑代码。