我正在编写一个简单的JavaFX7应用程序,其中使用StackedBarChart显示从数据库中提取的数据。我还为用户提供了基于特定属性值过滤显示的数据集的功能。我面临的问题是似乎存在一些缓存问题。考虑以下情况
步骤3的预期输出将依次为1,2,3,4和5。但是,它是1,2,4,5,3。请注意,过滤掉的类别会添加回数组的末尾,而不是应添加的位置。
到目前为止我已经尝试过的事情:
我还无法更新到Java 8-我也不能仅仅将其保留为已损坏的功能,因为在我们升级到Java 8之前,该功能预计会向用户推出。因此JavaFX 8的FilteredList已淘汰问题(仅查看ObservableList的更改,反向移植就很烦人)。如果可以避免的话,我也不想完全重新创建图形。
在这一点上,我没有主意。欢迎任何建议。下面是填充图表的功能。
private void refreshContents() {
this.vaguesTotal.getData().clear();
this.vaguesDone.getData().clear();
this.vaguesPending.getData().clear();
this.xAxis.setCategories(null);
this.chartCategories = FXCollections.observableArrayList();
// Already sorted here
for (VagueLight vagueInfo : context.getVagues()) {
if (this.categoryFilter != null && this.categoryFilter != vagueInfo.getCategory())
continue;
int dossiersTraites = vagueInfo.getNbDossiersTraites();
int dossiersPending = vagueInfo.getNbDossiersATraiter();
String vagueIdentifier = Integer.toString(vagueInfo.getId());
this.vaguesTotal.getData().add(new Data<String, Number>(vagueIdentifier, 0, vagueInfo));
this.vaguesDone.getData().add(new Data<String, Number>(vagueIdentifier, dossiersTraites, vagueInfo));
this.vaguesPending.getData().add(new Data<String, Number>(vagueIdentifier, dossiersPending, vagueInfo));
this.chartCategories.add(vagueIdentifier);
}
// This just sets up event handlers and styles for the series
for (Series<String, Number> dataSeries : this.barChart.getData()) {
for (Data<String, Number> dataNode : dataSeries.getData()) {
initializeDataNode(dataNode, dataSeries);
}
}
// This is where the "bug" happens
this.xAxis.setCategories(this.chartCategories);
layout(true);
}