Javafx 动态更新条形图系列

Javafx 动态更新条形图系列,javafx,javafx-8,Javafx,Javafx 8,我想从HashMap值创建动态条形图。在我的例子中,我有HashMap。我希望String是列的名称,Integer是列的值。我试过这个例子: StackedBarChart<String, Number> sbc; CategoryAxis xAxis; public StackedBarChart<String, Number> initBarChart() { xAxis = new CategoryAxis();

我想从HashMap值创建动态条形图。在我的例子中,我有
HashMap
。我希望String是列的名称,Integer是列的值。我试过这个例子:

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)));
        }        
    }
StackedBarChart-sbc;
分类法;
公共StackedBarChart initBarChart()
{
xAxis=新类别Axis();
NumberAxis yAxis=新的NumberAxis();
sbc=新堆叠条形图(xAxis,yAxis);
sbc.设置动画(假);
sbc.设置标题(“数据汇总”);
sbc.setCategoryGap(55);
yAxis.setLabel(“值”);
testData();
返回sbc;
}
公共void testData()
{
HashMap=newHashMap();
对于(int i=0;i<(int)(Math.random()*10);i++)
{
map.put(“house”+i,(int)(Math.random()*100));
}
createBarChartData(地图);
}
公共void createBarChartData(HashMap映射)
{
对于(int i=0;i

但我得到的是空的图表。在我的例子中,我想用动态数据序列每秒刷新图表值。用最少的资源做这件事的最好方法是什么?

我希望你解决了你的问题,但如果没有,你可以遵循这个小方法,它对我帮助很大

我也遇到了同样的问题。我所做的只是:

  • 使用
    HashMap
    作为我手动填充的数据源
  • 然后我将所有数据从它传递到
    XYChart.Series
  • 通过这个,我获得了
    XYChart.Series
    对象,然后我根据程序的逻辑动态地改变了它
  • 如本教程所示,通过时间线进行的所有更改

  • 祝你好运;-)

    什么是tcp?不管是什么,在每次迭代中(当您可能打算添加一个类别时)都会将类别轴重置为它。这是列的名称。只是简单的例子。简单是不够好的-它必须是一个SSCCE,证明问题有任何价值从这里开始!