2017-06-22 9 views
-1

地図から棒グラフを入力します。 私はこの方法をしようとしているが、それは動作しません:JavaFX Bar chart from Map

実際に
xAxisAuthor.setLabel(titleX); 
    yAxisAuthor.setLabel(titleY); 
    ReadJson jsonRead = new ReadJson(); 
    TypeToken<List<Book>> bookToken = new TypeToken<List<Book>>() { 
    }; 
    Map<String, Long> map = jsonRead.groupJson(new File(UrlAndPath.JSON_LIBRI), bookToken); 
    XYChart.Series<String, Number> series1 = new XYChart.Series<>(); 
    series1.setName(title); 
    for (Map.Entry<String, Long> entry : map.entrySet()) { 
     String tmpString = entry.getKey(); 
     Number tmpValue = entry.getValue(); 
     XYChart.Data<String, Number> d = new XYChart.Data<>(tmpString, tmpValue); 
     System.out.println(d); 
     series1.getData().add(d); 
    } 
    barChart.setTitle(title); 
    barChart.getData().addAll(series1); 

キーではなく値をとります。 しかし、XYChart.Dataが評価されているように私には思える:グラフで

Data[thomas mann,1,null] 
Data[giorgio zarelli,1,null] 

値は常にゼロです。 私にヒントを教えてもらえますか?

+1

[MCVE]を作成できますか?棒グラフとハードコーディングされたマップ(この問題を示すためにJSONは必要ありません)を持つ単純なアプリケーションを書くだけで、他の人がアプリケーションを実行して問題を見ることができます。 –

答えて

0

[OK]を、私は、JSONのないこのコードを試みたが、動作しているようです:

Map<String, Long> map = new HashMap<>(); 
    map.put("thomas mann", 1L); 
    map.put("clive cussler", 3L); 
    map.put("stephen king", 6L); 

    XYChart.Series<String, Number> series1 = new XYChart.Series<>(); 
    series1.setName(title); 
    for (Map.Entry<String, Long> entry : mapOld.entrySet()) { 
     String tmpString = entry.getKey(); 
     Number tmpValue = entry.getValue(); 
     XYChart.Data<String, Number> d = new XYChart.Data<>(tmpString, tmpValue); 
     System.out.println(d); 
     series1.getData().add(d); 
    } 
    barChart.setTitle(title); 
    barChart.getData().addAll(series1); 

多分問題は値をJSONに長い??

0

値が多すぎるという問題がありました。 作品:

for (Map.Entry<String, Long> entry : map.entrySet()) { 
     String tmpString = entry.getKey(); 
     Long tmpValue = entry.getValue(); 
     XYChart.Data<String, Number> d = new XYChart.Data<>(tmpString, tmpValue); 
     //System.out.println(tmpString + ": " + tmpValue); 
     //System.out.println(d); 
     series1.getData().add(d); 
     count++; 
     if (count == 10) { 
     break; 
     } 
    } 

ありがとうございます!

関連する問題