Charts GWTP、PresenterWidget和谷歌可视化API赢得';t显示图表

Charts 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;

我是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;
    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();

}