Charts GWTP、PresenterWidget和谷歌可视化API赢得';t显示图表
我是GWT-p的新手,但关于这个话题的资料很少。我试图制作一个简单的饼图小部件,用于测试。我制作了小部件演示器、视图和UiBinderCharts GWTP、PresenterWidget和谷歌可视化API赢得';t显示图表,charts,widget,uibinder,gwt-platform,pie-chart,Charts,Widget,Uibinder,Gwt Platform,Pie Chart,我是GWT-p的新手,但关于这个话题的资料很少。我试图制作一个简单的饼图小部件,用于测试。我制作了小部件演示器、视图和UiBinder package com.rs.gwtp.gametestingyou.client; import com.gwtplatform.mvp.client.PresenterWidget; import com.gwtplatform.mvp.client.View; import com.google.inject.Inject;
package com.rs.gwtp.gametestingyou.client;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
import com.google.inject.Inject;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.HTMLPanel;
public class PieChartPresenter extends
PresenterWidget<PieChartPresenter.MyView> {
public interface MyView extends View {
public HTMLPanel getChartPanel();
public void drawPieChart();
}
@Inject
public PieChartPresenter(final EventBus eventBus, final MyView view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
}
/*Ovde prmeniti method*/
@Override
protected void onReset() {
super.onReset();
/*MyView v = getView();
v.drawPieChart();*/
getView().drawPieChart();
}
}
在构造函数中,在调用
createAndBindUi
@Inject
public@uichartview(最终活页夹){
pieChart=新pieChart(createTable(),createOptions());
widget=binder.createAndBindUi(这个);
添加(pieChart);
}
好的,我发现这个问题是针对GWT-p的,因为EntryPoint类没有加载所需的包。它需要用这个方法加载
VisualizationUtils.loadVisualizationApi(onLoadCallback,PieChart.PACKAGE);
并将Runnable接口添加到实现EntryPoint类的类中,如以下示例所示:
Runnable onLoadCallback = new Runnable() {
@Override
public void run() {
PieChart pieChart = new PieChart(createTable(), createOptions());
Panel panel = RootPanel.get();
panel.add(pieChart);
}
private AbstractDataTable createTable() {
DataTable data = DataTable.create();
data.addColumn(ColumnType.STRING, "Task");
data.addColumn(ColumnType.NUMBER, "Hours per Day");
data.addRows(2);
data.setValue(0, 0, "Work");
data.setValue(0, 1, 14);
data.setValue(1, 0, "Sleep");
data.setValue(1, 1, 10);
return data;
}
private Options createOptions() {
Options options = Options.create();
options.setWidth(400);
options.setHeight(240);
options.setTitle("My Daily Activities");
return options;
}
};
但在本例中,这将把pieChart添加到RootPanel中,以了解如何将此对象pieChart添加到特定的PresenterWidget。当我这样做的时候,我会制作一个教程:)成功!!!这就是我最终如何完成我的意图:向现有的GWT-P项目添加一些图表。当我确信API设置良好时,我发现这是一个解决方案: UiBinder只需要有HTML表:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys='com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator'
ui:generateLocales='default' xmlns:c="urn:import:com.google.gwt.visualization.client.visualizations.corechart"
xmlns:v="urn:import:com.google.gwt.visualization.client.visualizations">
<g:HTMLPanel ui:field="chartPanel">
</g:HTMLPanel>
</ui:UiBinder>
那么视图应该简单如下:
public class PieChartView extends ViewImpl implements PieChartPresenter.MyView {
private final Widget widget;
@UiField HTMLPanel chartPanel;
public interface Binder extends UiBinder<Widget, PieChartView> {
}
@Inject
public @UiConstructor PieChartView(final Binder binder) {
widget = binder.createAndBindUi(this);
}
@Override
public Widget asWidget() {
return widget;
}
public HTMLPanel getChartPanel(){
return chartPanel;
}
公共类PieChartView扩展了ViewImpl实现了PieChartPresenter.MyView{
私有最终小部件;
@UiField HTMLPanel图表面板;
公共接口绑定器扩展了UiBinder{
}
@注入
public@uichartview(最终活页夹){
widget=binder.createAndBindUi(这个);
}
@凌驾
公共小部件asWidget(){
返回控件;
}
公共HTMLPanel getChartPanel(){
返回面板;
}
}
然后PresenterWidget,需要通过VisualizationUtils.loadVisualizationApi(onLoadCallback,PieChart.PACKAGE)加载适当的包;像这样:
public class PieChartPresenter extends
PresenterWidget<PieChartPresenter.MyView> {
public interface MyView extends View {
public HTMLPanel getChartPanel();
}
@Inject
public PieChartPresenter(final EventBus eventBus, final MyView view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
Runnable onLoadCallback = new Runnable() {
@Override
public void run() {
PieChart pieChart = new PieChart(createTable(), createOptions());
/*Panel panel = RootPanel.get();*/
/*panel.add(pieChart);*/
Panel panel = getView().getChartPanel();
panel.add(pieChart);
}
private AbstractDataTable createTable() {
DataTable data = DataTable.create();
data.addColumn(ColumnType.STRING, "Task");
data.addColumn(ColumnType.NUMBER, "Hours per Day");
data.addRows(2);
data.setValue(0, 0, "Work");
data.setValue(0, 1, 14);
data.setValue(1, 0, "Sleep");
data.setValue(1, 1, 10);
return data;
}
private Options createOptions() {
Options options = Options.create();
options.setWidth(400);
options.setHeight(240);
options.setTitle("My Daily Activities");
return options;
}
};
VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
}
/*Ovde prmeniti method*/
@Override
protected void onReset() {
super.onReset();
}
公共类演示者扩展
演示者Widget{
公共接口MyView扩展了视图{
公共HTMLPanel getChartPanel();
}
@注入
公共PieChartPresenter(最终事件总线事件总线,最终MyView视图){
超级(事件总线、视图);
}
@凌驾
受保护的void onBind(){
super.onBind();
Runnable onLoadCallback=new Runnable(){
@凌驾
公开募捐{
PieChart PieChart=新PieChart(createTable(),createOptions());
/*Panel=RootPanel.get()*/
/*面板。添加(图表)*/
Panel Panel=getView().getChartPanel();
面板。添加(图表);
}
私有AbstractDataTableCreateTable(){
DataTable data=DataTable.create();
data.addColumn(ColumnType.STRING,“任务”);
data.addColumn(ColumnType.NUMBER,“每天小时”);
数据。添加行(2);
数据。设定值(0,0,“功”);
数据设置值(0,1,14);
设置值(1,0,“睡眠”);
数据设置值(1,1,10);
返回数据;
}
私有选项createOptions(){
Options=Options.create();
选项。设置宽度(400);
选项:设置高度(240);
选项。设置标题(“我的日常活动”);
返回选项;
}
};
VisualizationUtils.loadVisualizationApi(onLoadCallback,PieChart.PACKAGE);
}
/*奥夫德-普梅尼蒂法*/
@凌驾
受保护的void onReset(){
super.onReset();
}
}
现在,这只是为了测试目的,这是我想要的结果:将PieChart放在PresenterWidget中,并在调用时显示它 你能发布完整的异常吗?好的,我发布了完整的异常吗?你能告诉我你在寻找什么和为什么吗?我想问题出在PieChartView类的构造函数中:@Inject public PieChartView(最终绑定器){widget=Binder.createAndBindUi(这个);PieChart PieChart=new PieChart(createTable(),createOptions();}我昨晚就有了这个想法,现在我已经在ModuleLoad上再次尝试了()再次向我抛出异常。我已尝试将PieChart定义为该构造函数中的一个参数,它具有相同的效果。我将在此问题上再添加一段代码。此示例的入口点。如何将此api加载到入口点类,我尝试了以下方法但没有效果:VisualizationUtils.loadVisualizationApi(onLoadCallback,PieChart.PACKAGE);通过初始化
pieChart
您是否得到相同的异常?是的,我得到了。您是否设法从我的代码中得到相同的结果,或者您有一个工作示例?您以前的异常是NullPointerException
。如果您在PieChartView
构造函数中放置断点,它会在哪一行引发异常。我确信可以用不同的方法来完成,所以我很想把它们放在这里。干杯!(现在来重构:)
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys='com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator'
ui:generateLocales='default' xmlns:c="urn:import:com.google.gwt.visualization.client.visualizations.corechart"
xmlns:v="urn:import:com.google.gwt.visualization.client.visualizations">
<g:HTMLPanel ui:field="chartPanel">
</g:HTMLPanel>
</ui:UiBinder>
public class PieChartView extends ViewImpl implements PieChartPresenter.MyView {
private final Widget widget;
@UiField HTMLPanel chartPanel;
public interface Binder extends UiBinder<Widget, PieChartView> {
}
@Inject
public @UiConstructor PieChartView(final Binder binder) {
widget = binder.createAndBindUi(this);
}
@Override
public Widget asWidget() {
return widget;
}
public HTMLPanel getChartPanel(){
return chartPanel;
}
public class PieChartPresenter extends
PresenterWidget<PieChartPresenter.MyView> {
public interface MyView extends View {
public HTMLPanel getChartPanel();
}
@Inject
public PieChartPresenter(final EventBus eventBus, final MyView view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
Runnable onLoadCallback = new Runnable() {
@Override
public void run() {
PieChart pieChart = new PieChart(createTable(), createOptions());
/*Panel panel = RootPanel.get();*/
/*panel.add(pieChart);*/
Panel panel = getView().getChartPanel();
panel.add(pieChart);
}
private AbstractDataTable createTable() {
DataTable data = DataTable.create();
data.addColumn(ColumnType.STRING, "Task");
data.addColumn(ColumnType.NUMBER, "Hours per Day");
data.addRows(2);
data.setValue(0, 0, "Work");
data.setValue(0, 1, 14);
data.setValue(1, 0, "Sleep");
data.setValue(1, 1, 10);
return data;
}
private Options createOptions() {
Options options = Options.create();
options.setWidth(400);
options.setHeight(240);
options.setTitle("My Daily Activities");
return options;
}
};
VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
}
/*Ovde prmeniti method*/
@Override
protected void onReset() {
super.onReset();
}