package demo.combo;
import java.util.Arrays;
import java.util.Map.Entry;
import org.zkoss.chart.Charts;
import org.zkoss.chart.LabelsItem;
import org.zkoss.chart.Marker;
import org.zkoss.chart.Point;
import org.zkoss.chart.Series;
import org.zkoss.chart.Theme;
import org.zkoss.chart.ThemeColors;
import org.zkoss.chart.plotOptions.PiePlotOptions;
import org.zkoss.chart.plotOptions.SeriesPlotOptions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Window;
public class ComboComposer extends SelectorComposer<Window> {
@Wire
Charts chart;
public void doAfterCompose(Window comp) throws Exception {
super.doAfterCompose(comp);
chart.getTitle().setAlign("left");
String[] colors = ThemeColors.getThemeColors(Theme.DEFAULT);
chart.getXAxis().setCategories(ComboData.getCategories());
chart.getYAxis().setTitle("Million liter");
LabelsItem item = new LabelsItem("Total liter");
item.setStyle("left: '50px'; top: '18px'; color: 'black'");
chart.getLabels().setItems(Arrays.asList(item));
for (Entry<String, Integer[]> entry : ComboData.getLiters().entrySet()) {
Series series = new Series();
series.setName(entry.getKey());
series.setType("column");
series.setData(entry.getValue());
chart.addSeries(series);
}
Series average = new Series();
average.setName("Average");
average.setType("spline");
average.setData(ComboData.getAverage());
Marker marker = average.getMarker();
marker.setLineWidth(2);
marker.setLineColor(colors[3]);
marker.setFillColor("white");
chart.addSeries(average);
Series total = new Series();
total.setName("Liter");
total.setType("pie");
int i = 0;
Point point = new Point("2020", 619);
point.setColor(colors[i++]);
total.addPoint(point);
Point point1 = new Point("2021", 586);
point1.setColor(colors[i++]);
total.addPoint(point1);
Point point2 = new Point("2022", 647);
point2.setColor(colors[i++]);
total.addPoint(point2);
total.setCenter(80, 70);
total.setSize(100);
total.setShowInLegend(false);
total.getDataLabels().setEnabled(false);
chart.addSeries(total);
}
}
package demo.combo;
import java.util.LinkedHashMap;
import java.util.Map;
public class ComboData {
private static String[] categories;
private static Map<String, Integer[]> liter;
private static final int unitSize = 5;
static {
categories = new String[] {"Jet fuel", "Duty-free diesel", "Petrol", "Diesel", "Gas oil"};
liter = new LinkedHashMap<String, Integer[]>();
liter.put("2020", new Integer[]{59, 83, 65, 228, 184});
liter.put("2021", new Integer[]{24, 79, 72, 240, 167});
liter.put("2022", new Integer[]{58, 88, 75, 250, 176});
}
public static Map<String, Integer[]> getLiters() {
return liter;
}
public static Number[] getAverage() {
return new Number[]{47, 83.33, 70.66, 239.33, 175.66};
}
public static String[] getCategories() {
return categories;
}
}