问题是,当用列表填充我的条形图(任意一个)时,相同的值会相互绘制并显示为一个。花了我一段时间解决这个问题。现在,我通过简单地寻找重复项并在其中添加一个“”来构建一个变通的解决方法。但是,如果您要显示包含100多个条目的列表,并且它们都是单个数字,则例如,每个数字后面最多必须有9个空格,这使得格式化这一切变得非常困难。因此,我的问题是:有什么方法可以指示条形图分别绘制,或者如果没有,是否有比我更好的解决方法?
public void updateChart(boolean originalChart, ArrayList<SortingEntry> entries){
Platform.runLater(() -> {
ArrayList<SortingEntry> list = Functions.checkForDoubles(entries);
if(originalChart){
inputSeries = new XYChart.Series();
for(SortingEntry entry:list){
XYChart.Data chartData = new XYChart.Data(entry.getValue(), entry.getValAsLong());
inputSeries.getData().add(chartData);
}
input.getData().clear();
input.getData().add(inputSeries);
} else {
resultSeries = new XYChart.Series();
for(SortingEntry entry:list){
XYChart.Data chartData = new XYChart.Data(entry.getValue(), entry.getValAsLong());
resultSeries.getData().add(chartData);
}
result.getData().clear();
result.getData().add(resultSeries);
}
System.out.println();
});
}
函数中的checkForDoubles:
public static ArrayList<SortingEntry> checkForDoubles(ArrayList<SortingEntry> list){
ArrayList<String> doubles = new ArrayList<>();
for(int i = 0; i < list.size(); i++){
for(int j = 0; j < list.size(); j++){
SortingEntry entry = list.get(i);
if(entry.getValue().equals(list.get(j).getValue()) && !doubles.contains(entry.getValue()) && i != j){
doubles.add(entry.getValue());
list.remove(entry);
entry.setValue(entry.getValue()+" ");
list.add(entry);
checkForDoubles(list);
}
}
}
return list;
}
答案 0 :(得分:1)
不幸的是,这是图表的定义-对于一个X值(entry.getValue()
),您只有一个Y值。如果您不关心X值-只需使用index即可:
int i;
for(SortingEntry entry:list){
XYChart.Data chartData = new XYChart.Data(i++, entry.getValAsLong());
inputSeries.getData().add(chartData);
}
否则,您需要使用类似该技巧的技巧(注意,utf中有zero width space)或编写自己的Axis
实现。