2015-03-05 2 views
0

Я хочу создать динамический BarChart из значений HashMap. В моем случае у меня есть HashMap<String, Integer>. Я хочу, чтобы String было именем столбца, а Integer - значением столбца. Я пробовал этот пример:Обновление BarChart Series динамически

StackedBarChart<String, Number> sbc; 
    CategoryAxis xAxis; 

    public StackedBarChart<String, Number> initBarChart() 
    { 
     xAxis = new CategoryAxis(); 
     NumberAxis yAxis = new NumberAxis(); 
     sbc = new StackedBarChart<>(xAxis, yAxis); 
     sbc.setAnimated(false); 

     sbc.setTitle("Data Summary"); 
     sbc.setCategoryGap(55); 

     yAxis.setLabel("Value"); 
     testData(); 

     return sbc; 
    } 

    public void testData() 
    { 
     HashMap<String, Integer> map = new HashMap<>(); 

     for (int i = 0; i < (int) (Math.random() * 10); i++) 
     { 
      map.put("house" + i, (int) (Math.random() * 100)); 
     } 

     createBarChartData(map); 
    } 

    public void createBarChartData(HashMap<String, Integer> map) 
    { 
     for (int i = 0; i < map.size(); i++) 
     { 
      XYChart.Series<String, Number> series1 = new XYChart.Series<>(); 
      XYChart.Data<String, Number> dataS1 = new XYChart.Data<>(); 

      Integer get = map.get("house" + i); 
      series1.setName(tcp); 
      dataS1.setXValue(tcp); 
      dataS1.setYValue(get); 
      series1.getData().add(dataS1); 
      xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(tcp))); 
      sbc.getData().clear(); 
      sbc.setData(FXCollections.<XYChart.Series<String, Number>>observableArrayList(Arrays.asList(series1))); 
     }   
    } 

Но я получаю пустой график. В моем случае я хочу обновлять значения диаграммы каждую секунду динамической серией данных. Каким будет лучший способ сделать это с минимальными ресурсами?

+0

что ТСР? Независимо от того, что бы это ни было, вы перебрасываете ось категории на нее на каждой итерации (когда вы, вероятно, намеревались добавить категорию) – kleopatra

+0

Это имя столбца. Просто простой пример. –

+0

простой не достаточно - это должен быть SSCCE, который демонстрирует, что проблема имеет значение – kleopatra

ответ

0

Надеюсь, вы решили свою проблему, но если нет, вы можете следовать этому небольшому tutorial, который мне очень помог.

У меня возникла такая же проблема. Что я сделал:

  1. использовал HashMap как источник данных, который я заполнил вручную.
  2. Затем я передал все данные от него до XYChart.Series series.
  3. К этому я получил XYChart.Series объект, который затем менялся динамически в соответствии с логикой моей программы.
  4. Все изменения, внесенные через Timeline, как показано в учебнике.

удачи ;-)