Line
Source :
1. File Zul :
1.1. line_chart.zull
<vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('demo.chart.line.LineChartVM')"> <chart id="chart" title="Half-Year Report" width="520" height="350" paneColor="#FFFFFF" type="line" yAxis="Amount" model="@bind(vm.model)" engine="@bind(vm.engine)" threeD="@bind(vm.threeD)" onClick="@command('showMessage',msg=event.areaComponent.tooltiptext)"/> <hlayout visible="@bind(not empty vm.message)"> You clicked on :<label value="@bind(vm.message)"/> </hlayout></vlayout>
1.2. line_chart_ctrl.zull
<vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('demo.chart.line.LineChartConfigVM')"> <checkbox label="Toggle 3D Chart" checked="@bind(vm.threeD)" onCheck="@global-command('configChanged',threeD=vm.threeD,showLine=vm.showLine,showShape=vm.showShape)"/> <checkbox label="Show Line Shape" checked="@bind(vm.showShape)" visible="@bind(not vm.threeD)" onCheck="@global-command('configChanged',showShape=vm.showShape)"/> <checkbox label="Show Lines (Actual, Establishment)" checked="@bind(vm.showLine)" visible="@bind(not vm.threeD)" onCheck="@global-command('configChanged',showLine=vm.showLine)"/> <vlayout spacing="5px" visible="@bind(not vm.threeD)" > Line Width : <spinner constraint="no negative,no zero,no empty,min 1, max 10" width="100px" instant="true" value="@bind(vm.width)" onChange="@global-command('configChanged',width=vm.width)"/> </vlayout></vlayout>
2. View Model :
2.1. linechartVM.java
package demo.chart.line;import org.zkoss.bind.annotation.BindingParam;import org.zkoss.bind.annotation.Command;import org.zkoss.bind.annotation.GlobalCommand;import org.zkoss.bind.annotation.Init;import org.zkoss.bind.annotation.NotifyChange;import org.zkoss.zul.CategoryModel;public class LineChartVM { CategoryModel model; LineChartEngine engine; String message; boolean threeD; @Init public void init() { engine = new LineChartEngine(); model = ChartData.getModel(); } public LineChartEngine getEngine() { return engine; } public CategoryModel getModel() { return model; } public String getMessage() { return message; } public boolean isThreeD() { return threeD; } @Command("showMessage") @NotifyChange("message") public void onShowMessage( @BindingParam("msg") String message){ this.message = message; } @GlobalCommand("configChanged") @NotifyChange({"threeD","engine"}) public void onConfigChanged( @BindingParam("threeD") Boolean threeD, @BindingParam("showLine") Boolean showLine, @BindingParam("showShape") Boolean showShape, @BindingParam("width") Integer width){ if (threeD != null) { this.threeD = threeD; } if (showLine != null) { engine.setShowLine(showLine); } if (showShape != null) { engine.setShowShape(showShape); } if (width != null) { engine.setWidth(width); } }}
2.2. linechartconfigVN.java
package demo.chart.line;public class LineChartConfigVM { boolean threeD = false; boolean showLine = true; boolean showShape = true; int width = 2; public boolean isThreeD() { return threeD; } public void setThreeD(boolean threeD) { this.threeD = threeD; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public boolean isShowLine() { return showLine; } public void setShowLine(boolean showLine) { this.showLine = showLine; } public boolean isShowShape() { return showShape; } public void setShowShape(boolean showShape) { this.showShape = showShape; }}
2.3. linechartengine.java
package demo.chart.line;import java.awt.BasicStroke;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.zkoss.zkex.zul.impl.JFreeChartEngine;import org.zkoss.zul.Chart;import demo.chart.ChartColors;/* * you are able to do many advanced chart customization by extending ChartEngine */public class LineChartEngine extends JFreeChartEngine { public int width = 2; public boolean showLine = true; public boolean showShape = true; public boolean prepareJFreeChart(JFreeChart jfchart, Chart chart) { LineAndShapeRenderer renderer = (LineAndShapeRenderer) ((CategoryPlot) jfchart.getPlot()).getRenderer(); renderer.setSeriesStroke(0, new BasicStroke(width)); renderer.setSeriesStroke(1, new BasicStroke(width)); renderer.setSeriesStroke(2, new BasicStroke(width)); renderer.setSeriesLinesVisible(0, chart.isThreeD()); renderer.setSeriesLinesVisible(1, showLine); renderer.setSeriesLinesVisible(2, showLine); renderer.setSeriesShapesVisible(0, showShape); renderer.setSeriesShapesVisible(1, showShape); renderer.setSeriesShapesVisible(2, showShape); renderer.setSeriesPaint(0, ChartColors.COLOR_1); renderer.setSeriesPaint(1, ChartColors.COLOR_2); renderer.setSeriesPaint(2, ChartColors.COLOR_3); return false; } public void setWidth(int width) { this.width = width; } public void setShowLine(boolean showLine) { this.showLine = showLine; } public void setShowShape(boolean showShape) { this.showShape = showShape; }}
3. Model :
3.1. ChartData.java
package demo.chart.line;import org.zkoss.zul.CategoryModel;import org.zkoss.zul.SimpleCategoryModel;public class ChartData { public static CategoryModel getModel() { CategoryModel model = new SimpleCategoryModel(); String[] category = { "Predict", "Actual", "Establishment" }; model.setValue(category[0], "Jan", new Integer(25)); model.setValue(category[0], "Feb", new Integer(35)); model.setValue(category[0], "Mar", new Integer(45)); model.setValue(category[0], "Apr", new Integer(48)); model.setValue(category[0], "May", new Integer(53)); model.setValue(category[0], "Jun", new Integer(62)); model.setValue(category[1], "Jan", new Integer(28)); model.setValue(category[1], "Feb", new Integer(33)); model.setValue(category[1], "Mar", new Integer(40)); model.setValue(category[1], "Apr", new Integer(53)); model.setValue(category[1], "May", new Integer(58)); model.setValue(category[1], "Jun", new Integer(75)); model.setValue(category[2], "Jan", new Integer(40)); model.setValue(category[2], "Feb", new Integer(55)); model.setValue(category[2], "Mar", new Integer(65)); model.setValue(category[2], "Apr", new Integer(57)); model.setValue(category[2], "May", new Integer(63)); model.setValue(category[2], "Jun", new Integer(68)); return model; }}
3.2. ChartColor.java
Hasil :
Reference : https://www.zkoss.org/zkdemo/chart