Sample code is below.
Code:
package com.smartgwt.sample.client; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.ChartType; import com.smartgwt.client.widgets.chart.FacetChart; import com.smartgwt.client.widgets.cube.Facet; import com.smartgwt.client.widgets.cube.FacetValue; import com.smartgwt.client.widgets.drawing.DrawItem; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.layout.VLayout; import java.util.Date; import java.util.LinkedHashMap; public class DateScatterChartSample implements EntryPoint { private static final long SECONDS = 1000; private static final long MINUTES = 60 * SECONDS; private static final long HOURS = 60 * MINUTES; private static final long DAYS = 24 * HOURS; private static final long YEARS = 365 * DAYS; private static final int NUM_TIME_SCALES = 10; private static final String[] TIME_SCALE_PROPERTIES = { "year5", "year", "day90", "day30", "day7", "day", "hour10", "hour5", "hour", "min15" }; private static final long[] TIME_SCALES = { 5 * YEARS, 1 * YEARS, 90 * DAYS, 30 * DAYS, 7 * DAYS, 1 * DAYS, 10 * HOURS, 5 * HOURS, 1 * HOURS, 15 * MINUTES }; private VLayout layout; private Record[] chartData; public void onModuleLoad() { String defaultTimeScale = "day90"; @SuppressWarnings("deprecation") Date start = new Date(110, 0, 1); chartData = generateRandomData(start, -10.0, 10.0, 100); VLayout layout = this.layout = new VLayout(); layout.setID("dateScatterChartLayout"); layout.setTop(10); layout.setLeft(10); layout.setWidth(420); layout.setHeight(450); layout.setMembersMargin(20); DynamicForm timeScaleSelector = createTimeScaleSelector(defaultTimeScale); FacetChart dateScatterChart = createDateScatterChart(defaultTimeScale); layout.setMembers(timeScaleSelector, dateScatterChart); layout.draw(); } private FacetChart createDateScatterChart(String timeScale) { FacetChart dateScatter = new FacetChart(); dateScatter.setID("dateScatterChart"); dateScatter.setChartType(ChartType.SCATTER); dateScatter.setWidth100(); dateScatter.setHeight100(); dateScatter.setShowTitle(false); Facet metricFacet = new Facet("metric"); metricFacet.setInlinedValues(true); metricFacet.setValues(new FacetValue("y"), new FacetValue(timeScale)); dateScatter.setFacets(metricFacet); dateScatter.setData(chartData); dateScatter.setShowChartRect(true); dateScatter.setChartRectMargin(10); dateScatter.setBandedBackground(false); DrawItem dataPoint = new DrawItem(); dataPoint.setFillColor("#7f62b4"); dataPoint.setLineWidth(0); dateScatter.setDataPointProperties(dataPoint); return dateScatter; } private DynamicForm createTimeScaleSelector(String defaultTimeScale) { SelectItem selectItem = new SelectItem("timeScale", "Time Scale"); selectItem.setDefaultValue(defaultTimeScale); LinkedHashMap<String, String> valueMap = new LinkedHashMap<String, String>(10); valueMap.put("year5", "5 Years"); valueMap.put("year", "1 Year"); valueMap.put("day90", "90 Days"); valueMap.put("day30", "30 Days"); valueMap.put("day7", "1 Week"); valueMap.put("day", "1 Day"); valueMap.put("hour10", "10 Hours"); valueMap.put("hour5", "5 Hours"); valueMap.put("hour", "1 Hour"); valueMap.put("min15", "15 Minutes"); selectItem.setValueMap(valueMap); selectItem.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { String newTimeScale = (String)event.getValue(); VLayout layout = DateScatterChartSample.this.layout; layout.removeMember(layout.getMember(1)); layout.addMember(createDateScatterChart(newTimeScale)); } }); DynamicForm form = new DynamicForm(); form.setItems(selectItem); return form; } private static Record[] generateRandomData(Date start, double minValue, double maxValue, int n) { long startTime = start.getTime(); Record[] data = new Record[n]; for (int i = 0; i < n; i++) { Record record = data[i] = new Record(); record.setAttribute("y", minValue + (maxValue - minValue) * Math.random()); for (int j = 0; j < NUM_TIME_SCALES; j++) { Date value = new Date(startTime + (long)Math.floor(Math.random() * TIME_SCALES[j])); record.setAttribute(TIME_SCALE_PROPERTIES[j], value); } } return data; } }
Leave a comment: