|
Processing...
Description & Source Code
This example shows a project progress and complete percent of actual job.
gantt_chart.zul
<vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('demo.chart.gantt.GanttChartVM')"> <chart id="chart" width="520" height="400" fgAlpha="255" paneColor="#ffffff" type="gantt" model="@bind(vm.model)" engine="@bind(vm.engine)" onClick="@command('showMessage',msg=event.areaComponent.tooltiptext)"/> <hlayout visible="@bind(not empty vm.message)"> You clicked on :<label value="@bind(vm.message)"/> </hlayout> </vlayout> gantt_chart_ctrl.zul
<vlayout apply="org.zkoss.bind.BindComposer"> <radiogroup onCheck="@global-command('configChanged', category=self.selectedItem.value)"> <vlayout> <radio label="Both Series" value="both" selected="true" /> <radio label="Scheduled" value="scheduled" /> <radio label="Actual" value="actual" /> <checkbox label="Percent Complete" onCheck="@global-command('configChanged', isComplete=self.checked)"/> </vlayout> <groupbox closable="false" sclass="z-demo-config"> <caption label="Theme" /> <hlayout> Choose : <listbox id="partSelect" mold="select" onSelect="@global-command('configChanged', colorSet=self.selectedItem.value)"> <listitem label="Customize 1" value="1" selected="true"/> <listitem label="Customize 2" value="2"/> <listitem label="Customize 3" value="3"/> </listbox> </hlayout> </groupbox> </radiogroup> </vlayout> GanttChartVM.java
package demo.chart.gantt; 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.GanttModel; public class GanttChartVM { GanttModel model; GanttChartEngine engine; String message; String category; boolean complete; @Init public void init() { engine = new GanttChartEngine(); model = ChartData.getModel(category = "both", complete = false); } public GanttChartEngine getEngine() { return engine; } public GanttModel getModel() { return model; } public String getMessage() { return message; } @Command("showMessage") @NotifyChange("message") public void onShowMessage( @BindingParam("msg") String message){ this.message = message; } @GlobalCommand("configChanged") @NotifyChange({"model","engine"}) public void onConfigChanged( @BindingParam("category") String category, @BindingParam("isComplete") Boolean complete, @BindingParam("colorSet") Integer colorSet){ if(category!=null){ this.category = category; } if(complete!=null){ this.complete = complete; } if(category!=null || complete!=null){ this.category = category==null?this.category:category; this.complete = complete==null?this.complete:complete; model = ChartData.getModel(this.category, this.complete); } if(colorSet!=null){ engine.setColorSet(colorSet); } } } GanttChartEngine.java
package demo.chart.gantt; import java.awt.Color; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.renderer.category.GanttRenderer; import org.jfree.chart.renderer.category.GradientBarPainter; import org.jfree.chart.renderer.category.StandardBarPainter; 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 GanttChartEngine extends JFreeChartEngine { public Color task1Color; public Color task2Color; public Color shadowColor; public Color completeColor; public Color incompleteColor; public boolean gradientBar = false; public GanttChartEngine(){ setColorSet(1); } public boolean prepareJFreeChart(JFreeChart jfchart, Chart chart) { if (task1Color == null) return false; CategoryPlot plot = (CategoryPlot) jfchart.getPlot(); GanttRenderer renderer = (GanttRenderer) plot.getRenderer(); renderer.setBarPainter(gradientBar ? new GradientBarPainter() : new StandardBarPainter()); renderer.setIncompletePaint(incompleteColor); renderer.setCompletePaint(completeColor); renderer.setShadowPaint(shadowColor); renderer.setSeriesPaint(0, task1Color); renderer.setSeriesPaint(1, task2Color); return false; } public void setColorSet(int value) { switch (value) { case 1: gradientBar = false; task1Color = new Color(0x083643); task2Color = new Color(0xB1E001); shadowColor = new Color(0x1D3C42); completeColor = new Color(0xCEF09D); incompleteColor = new Color(0x476C5E); break; case 2: gradientBar = false; task1Color = ChartColors.COLOR_2; task2Color = ChartColors.COLOR_3; shadowColor = ChartColors.COLOR_1; completeColor = ChartColors.COLOR_4; incompleteColor = ChartColors.COLOR_5; break; case 3: gradientBar = false; task1Color = new Color(0xADCF4F); task2Color = new Color(0xF2EC99); shadowColor = new Color(0x84815B); completeColor = new Color(0x4A1A2C); incompleteColor = new Color(0x8E3557); break; case 0: default: // Default Color task1Color = null; } } } ChartData.java
package demo.chart.gantt; import java.util.Calendar; import java.util.Date; import org.zkoss.zul.GanttModel; import org.zkoss.zul.GanttModel.GanttTask; public class ChartData { public static GanttModel getModel(String category, boolean complete) { GanttModel ganttmodel = new GanttModel(); int theYear = Calendar.getInstance().get(Calendar.YEAR); if ("both".equals(category) || "actual".equals(category)) { ganttmodel.addValue("Actual", new GanttTask("Write Proposal", date(theYear,4,1), date(theYear,4,3), complete ? 1.0 : 0.0)); ganttmodel.addValue("Actual", new GanttTask("Requirements Analysis", date(theYear,4,10), date(theYear,5,15), complete ? 1.0: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Design Phase", date(theYear,5,15), date(theYear,6,17), complete ? 1.0: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Alpha Implementation", date(theYear,7,1), date(theYear,9,12), complete ? 0.8: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Design Review", date(theYear,9,12), date(theYear,9,22), complete ? 1.0: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Revised Design Signoff", date(theYear,9,25), date(theYear,9,27), complete ? 1.0: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Beta Implementation", date(theYear,8,12), date(theYear,9,12), complete ? 0.9: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Testing", date(theYear,10,31), date(theYear,11,17), complete ? 0.8: 0.0)); ganttmodel.addValue("Actual", new GanttTask("Final Implementation", date(theYear,11,18), date(theYear,12,5), complete ? 0.8: 0.0)); } if ("both".equals(category) || "scheduled".equals(category)) { ganttmodel.addValue("Scheduled", new GanttTask("Write Proposal", date(theYear,4,1), date(theYear,4,5), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Requirements Analysis", date(theYear,4,10), date(theYear,5,5), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Design Phase", date(theYear,5,6), date(theYear,5,30), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Alpha Implementation", date(theYear,6,3), date(theYear,7,31), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Design Review", date(theYear,8,1), date(theYear,8,8), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Revised Design Signoff", date(theYear,8,10), date(theYear,8,10), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Beta Implementation", date(theYear,8,12), date(theYear,9,12), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Testing", date(theYear,9,13), date(theYear,10,31), 0.0)); ganttmodel.addValue("Scheduled", new GanttTask("Final Implementation", date(theYear,11,1), date(theYear,11,15), 0.0)); } return ganttmodel; } private static Date date(int year, int month, int day) { final Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, day); return calendar.getTime(); } } ChartColors.java
package demo.chart; import java.awt.Color; import org.apache.commons.lang.StringUtils; public class ChartColors { //main colors public static Color COLOR_1 = new Color(0x3E454C); public static Color COLOR_2 = new Color(0x2185C5); public static Color COLOR_3 = new Color(0x7ECEFD); public static Color COLOR_4 = new Color(0xFFF6E5); public static Color COLOR_5 = new Color(0xFF7F66); //additional colors public static Color COLOR_6 = new Color(0x98D9FF); public static Color COLOR_7 = new Color(0x4689B1); public static Color COLOR_8 = new Color(0xB17C35); public static Color COLOR_9 = new Color(0xFDC77E); public static String toHtmlColor(Color color) { return "#" + toHexColor(color); } public static String toHexColor(Color color) { return StringUtils.leftPad(Integer.toHexString(color.getRGB() & 0xFFFFFF), 6, '0'); } }
Copyright © 2005-2024 Potix Corporation All rights reserved.
|
Processing... |