Created
March 10, 2014 17:44
-
-
Save branflake2267/9470126 to your computer and use it in GitHub Desktop.
Chart Scatter Test with Category axis override
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.gwt.core.client.GWT; | |
import com.google.gwt.user.client.ui.RootPanel; | |
import com.google.gwt.user.client.ui.Widget; | |
import com.sencha.gxt.chart.client.chart.Chart; | |
import com.sencha.gxt.chart.client.chart.Chart.Position; | |
import com.sencha.gxt.chart.client.chart.axis.CategoryAxis; | |
import com.sencha.gxt.chart.client.chart.axis.NumericAxis; | |
import com.sencha.gxt.chart.client.chart.series.Primitives; | |
import com.sencha.gxt.chart.client.chart.series.ScatterSeries; | |
import com.sencha.gxt.chart.client.chart.series.SeriesToolTipConfig; | |
import com.sencha.gxt.chart.client.draw.RGB; | |
import com.sencha.gxt.chart.client.draw.sprite.Sprite; | |
import com.sencha.gxt.chart.client.draw.sprite.TextSprite; | |
import com.sencha.gxt.core.client.ValueProvider; | |
import com.sencha.gxt.data.shared.ListStore; | |
import com.sencha.gxt.data.shared.ModelKeyProvider; | |
import com.sencha.gxt.data.shared.PropertyAccess; | |
import com.sencha.gxt.fx.client.Draggable; | |
import com.sencha.gxt.widget.core.client.ContentPanel; | |
import com.sencha.gxt.widget.core.client.FramedPanel; | |
import com.sencha.gxt.widget.core.client.Resizable; | |
import com.sencha.gxt.widget.core.client.Resizable.Dir; | |
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; | |
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; | |
import com.sencha.gxt.widget.core.client.event.CollapseEvent; | |
import com.sencha.gxt.widget.core.client.event.CollapseEvent.CollapseHandler; | |
import com.sencha.gxt.widget.core.client.event.ExpandEvent; | |
import com.sencha.gxt.widget.core.client.event.ExpandEvent.ExpandHandler; | |
import com.sencha.gxt.widget.core.client.toolbar.ToolBar; | |
public class ChartScatterTest { | |
public ChartScatterTest() { | |
RootPanel.get().add(asWidget()); | |
} | |
public class MyData { | |
private String key; | |
private double dataX; | |
private double dataY; | |
public MyData(String key, double dataX, double dataY) { | |
this.key = key; | |
this.dataX = dataX; | |
this.dataY = dataY; | |
} | |
public String getKey() { | |
return this.key; | |
} | |
public double getDataX() { | |
return dataX; | |
} | |
public double getDataY() { | |
return dataY; | |
} | |
} | |
/** | |
* Override labels to line up with axis ticks | |
*/ | |
public class CategoryAxisExt extends CategoryAxis<MyData, String> { | |
@Override | |
protected void applyData() { | |
from = 0; | |
to = 3;//chart.getCurrentStore().size(); | |
steps = (int) (to - 1); | |
} | |
@Override | |
protected void createLabels() { | |
labelNames.clear(); | |
ListStore<MyData> store = chart.getCurrentStore(); | |
for (int i = 0; i < 3; i++) { | |
labelNames.add(field.getValue(store.get(i))); | |
System.out.println("label=" + field.getValue(store.get(i))); | |
} | |
} | |
} | |
/** | |
* The message displayed to the user when the server cannot be reached or returns an error. | |
*/ | |
public interface DataPropertyAccess extends PropertyAccess<MyData> { | |
ModelKeyProvider<MyData> key(); | |
ValueProvider<MyData, Double> dataX(); | |
ValueProvider<MyData, Double> dataY(); | |
} | |
private static final DataPropertyAccess dataAccess = GWT.create(DataPropertyAccess.class); | |
public Widget asWidget() { | |
final ListStore<MyData> store = new ListStore<MyData>(dataAccess.key()); | |
store.add(new MyData("key1", 1, 2)); | |
store.add(new MyData("key2", 2, 3)); | |
store.add(new MyData("key3", 3, 2)); | |
store.add(new MyData("key4", 3, 4)); | |
final Chart<MyData> chart = new Chart<MyData>(); | |
chart.setStore(store); | |
chart.setShadowChart(false); | |
NumericAxis<MyData> axisY = new NumericAxis<MyData>(); | |
axisY.setPosition(Position.LEFT); | |
axisY.addField(dataAccess.dataY()); | |
axisY.setMinimum(0); | |
axisY.setMaximum(10); | |
TextSprite title = new TextSprite("Number of Hits"); | |
title.setFontSize(18); | |
axisY.setTitleConfig(title); | |
chart.addAxis(axisY); | |
CategoryAxis<MyData, String> axisX = new CategoryAxisExt(); | |
axisX.setPosition(Position.BOTTOM); | |
// This is an example to deal with label conversion if desired. | |
// Otherwise it could be a data access property | |
axisX.setField(new ValueProvider<MyData, String>() { | |
@Override | |
public String getValue(MyData object) { | |
String s = ""; | |
if (object.getDataX() == 1.0) { | |
s = "one"; | |
} else if (object.getDataX() == 2.0) { | |
s = "two"; | |
} else if (object.getDataX() == 3.0) { | |
s = "three"; | |
} | |
return s; | |
} | |
@Override | |
public void setValue(MyData object, String value) { | |
} | |
@Override | |
public String getPath() { | |
return "axisX"; | |
} | |
}); | |
chart.addAxis(axisX); | |
final ScatterSeries<MyData> series = new ScatterSeries<MyData>(); | |
series.setYAxisPosition(Position.LEFT); | |
// set both x and y | |
series.setXField(dataAccess.dataX()); | |
series.setYField(dataAccess.dataY()); | |
series.setToolTipConfig(new SeriesToolTipConfig<MyData>()); | |
Sprite marker = Primitives.cross(0, 0, 8); | |
marker.setFill(RGB.GREEN); | |
series.setMarkerConfig(marker); | |
series.setHighlighting(true); | |
chart.addSeries(series); | |
ContentPanel panel = new FramedPanel(); | |
panel.setCollapsible(true); | |
panel.setHeadingText("Scatter Chart"); | |
panel.setPixelSize(620, 500); | |
panel.setBodyBorder(true); | |
final Resizable resize = new Resizable(panel, Dir.E, Dir.SE, Dir.S); | |
resize.setMinHeight(400); | |
resize.setMinWidth(400); | |
panel.addExpandHandler(new ExpandHandler() { | |
@Override | |
public void onExpand(ExpandEvent event) { | |
resize.setEnabled(true); | |
} | |
}); | |
panel.addCollapseHandler(new CollapseHandler() { | |
@Override | |
public void onCollapse(CollapseEvent event) { | |
resize.setEnabled(false); | |
} | |
}); | |
new Draggable(panel, panel.getHeader()).setUseProxy(false); | |
ToolBar toolBar = new ToolBar(); | |
VerticalLayoutContainer layout = new VerticalLayoutContainer(); | |
panel.add(layout); | |
toolBar.setLayoutData(new VerticalLayoutData(1, -1)); | |
layout.add(toolBar); | |
chart.setLayoutData(new VerticalLayoutData(1, 1)); | |
layout.add(chart); | |
return panel; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment