如何在BarChartModel中向ChartSeries添加项目?

时间:2015-12-07 14:38:01

标签: primefaces charts

我使用PrimeFaces,以构建BarChart。我的目标是将一些Testprojects相互比较。每个Bar应该是一个Testproject,您可以从中读取项目所处的不同阶段。 我的问题是:我有一个View,我可以在其中添加新的Testprojects。当我添加一个时,会有一个新的Bar。但是如果我想添加另一个,那么旧的Bar就会被写下来。当然是因为set ...但我想做一些像add(testprojectProducer.getTestproject()。getName(),1)。  图表应该能够记住旧条形图并添加新条形图。有没有办法,或者我必须说得好,并建立我自己的图表?

这是我的代码:

@ManagedBean
public class ChartView implements Serializable  {

private static final long serialVersionUID = 9181815723688700642L;
private BarChartModel barModel;
@Inject 
private TestprojectProducer testprojectProducer;

@PostConstruct
public void init() {
    createBarModel();
    new ArrayList<String>();  
}

private BarChartModel initBarModel() {

    BarChartModel model = new BarChartModel(); //Diagram
    ChartSeries cs= new ChartSeries();  // Balken
    cs.setLabel("Testprojekte");
    cs.set("Testprojekt 1",5);
    cs.set(testprojectProducer.getTestproject().getName(), 1);
    model.addSeries(cs);
    return model;
}   
    public void createBarModel() {

    barModel =initBarModel();
    barModel.setTitle("");
    barModel.setLegendPosition("");
    barModel.setSeriesColors("C80000");

    Axis xAxis = barModel.getAxis(AxisType.X);
    xAxis.setLabel("Testprojekte");

    Axis yAxis = barModel.getAxis(AxisType.Y);
    yAxis.setLabel("Phasen");
    yAxis.setMin(0);
    yAxis.setMax(7);

}

public BarChartModel getBarModel() {  

    return barModel;
}

public void setBarChartModel(BarChartModel barModel){
    this.barModel= barModel;
}


}

我希望我的问题有一个解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。当你使用'HashMap'时,那并不难:

   private BarChartModel initBarModel() {

    BarChartModel model = new BarChartModel(); 
    ChartSeries cc = new ChartSeries(); 
    cc.setLabel("Testprojekte");

    HashMap<Object, Number> groupData = new HashMap<Object, Number>();
    for (int i = 0; i < 3; i++) {
        groupData.put(testProjectListProducer.getList().get(i).getName(), 2);
    }
    cc.setData(groupData);
    model.addSeries(cc);

    return model;
}