<?xml version="1.0" encoding="UTF-8"?>
<window apply="demo.bar.ColumnParsedComposer">
<charts id="chart" type="column"
title="Data extracted from a ZK grid model"/>
<grid model="${$composer.foods}" hflex="min">
<columns>
<column label="" width="80px" />
<column width="80px" forEach="${$composer.people}" label="${each}"/>
</columns>
<template name="model">
<row>
<label value="${each.name}"/>
<label forEach="${each.units}" value="${each}"/>
</row>
</template>
</grid>
</window>
package demo.bar;
import java.util.List;
import org.zkoss.chart.Charts;
import org.zkoss.chart.model.CategoryModel;
import org.zkoss.chart.model.DefaultCategoryModel;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Window;
public class ColumnParsedComposer extends SelectorComposer<Window> {
@Wire
Charts chart;
public void doAfterCompose(Window comp) throws Exception {
super.doAfterCompose(comp);
chart.getYAxis().setAllowDecimals(false);
chart.getYAxis().getTitle().setText("Units");
CategoryModel catemodel = new DefaultCategoryModel();
for (Food food : ColumnParsedData.getFoods()) {
List<Integer> units = food.getUnits();
for (int i = 0; i < units.size(); ++i) {
catemodel.setValue(getPeople().get(i), food.getName(), units.get(i));
}
}
chart.setModel(catemodel);
}
public ListModel<Food> getFoods() {
return new ListModelList<Food>(ColumnParsedData.getFoods(), true);
}
public List<String> getPeople() {
return ColumnParsedData.getPeople();
}
}
package demo.bar;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class ColumnParsedData {
private static final List<Food> foods;
static {
foods = new ArrayList<Food>();
foods.add(new Food("Apple", 3, 4));
foods.add(new Food("Pears", 2, 0));
foods.add(new Food("Plums", 5, 11));
foods.add(new Food("Bananas", 1, 1));
foods.add(new Food("Oranges", 2, 4));
}
public static List<Food> getFoods() {
return foods;
}
public static List<String> getPeople() {
return Arrays.asList("Jane", "John");
}
}