2011-06-08 56 views
1

我在学习如何在GWT项目中创建线图。以下是我的代码:GWT线图问题

package testproject2.client; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.google.gwt.user.client.ui.VerticalPanel; 
import com.google.gwt.visualization.client.AbstractDataTable; 
import com.google.gwt.visualization.client.DataTable; 
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType; 
import com.google.gwt.visualization.client.VisualizationUtils; 
import com.google.gwt.visualization.client.visualizations.LineChart; 
import com.google.gwt.visualization.client.visualizations.LineChart.Options; 

public class TestProject2 implements EntryPoint { 

    VerticalPanel vPanel= new VerticalPanel(); 
    public void onModuleLoad() 
    { 
     Runnable onLoadCallback = new Runnable() 
     { 
      public void run() 
      { 
       AbstractDataTable data = createLineTable(); 
       Options options=createLineOptions(); 
       LineChart pie = new LineChart(data, options); 
       vPanel.add(pie); 
      } 
     }; 
     VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); 
     RootPanel.get().add(vPanel); 
    } 

    private LineChart.Options createLineOptions() 
    { 
      Options options = Options.create(); 
      options.setWidth(400); 
      options.setHeight(240); 
      options.setTitle("NFL Picks"); 
      return options; 
    } 
    private AbstractDataTable createLineTable() 
    { 
      DataTable data = DataTable.create(); 
      data.addColumn(ColumnType.NUMBER,"Week Number"); 
      data.addColumn(ColumnType.NUMBER,"Num Correct"); 
      data.addRows(3); 
      data.setValue(0, 0, "Week Number"); 
      data.setValue(0, 1, "Num Correct"); 
      data.setValue(1, 0, 1); 
      data.setValue(1, 1, 2); 
      data.setValue(1, 1, 13); 
      data.setValue(1, 2, 12); 
      return data; 
    } 
} 

不过,我收到以下错误:

10:48:57.874 [ERROR] [testproject2] Uncaught exception escaped 
com.google.gwt.core.client.JavaScriptException: (Error): Type mismatch. Value Week Number does not match type number in column index 0 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:237) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:132) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:289) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107) 
    at com.google.gwt.visualization.client.DataTable$.setValue$(DataTable.java) 
    at testproject2.client.TestProject2.createLineTable(TestProject2.java:46) 
    at testproject2.client.TestProject2.access$0(TestProject2.java:40) 
    at testproject2.client.TestProject2$1.run(TestProject2.java:22) 
    at com.google.gwt.ajaxloader.client.ExceptionHelper.runProtected(ExceptionHelper.java:36) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:167) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) 
    at java.lang.Thread.run(Unknown Source) 

我加入GWT Visualization API的模块中的类路径。有人能指出我在这里的错误吗?提前感谢。

回答

3

貌似错误是由这一行造成的:

data.setValue(0, 0, "Week Number"); 

虽然它也将所致,data.setValue(0, 1, "Num Correct");

你打电话时,

data.addColumn(ColumnType.NUMBER,"Week Number"); 
data.addColumn(ColumnType.NUMBER,"Num Correct"); 

您是说列中的类型将始终为NUMBER类型,但是,然后,您尝试在第0行中放入一个字符串 - “周数” - 尝试删除设置为V的两行代码到“Week Number”和“Num Correct”,然后相应地更新您的指数。

  DataTable data = DataTable.create(); 
      data.addColumn(ColumnType.NUMBER,"Week Number"); 
      data.addColumn(ColumnType.NUMBER,"Num Correct"); 
      data.addRows(3); 
      data.setValue(0, 0, 1); 
      data.setValue(0, 1, 2); 
      data.setValue(0, 1, 13); // This is overwriting the previous column 
      data.setValue(0, 2, 12); // This is setting value for a column you didn't add 
      return data; 

您可能需要查阅API文档以获取创建折线图的示例。 记住:data.SetValue(行,列,数据)

http://code.google.com/apis/chart/interactive/docs/gallery/linechart.html

+0

添加列以这种方式应该把名字写在表的顶部。你不想使用ColumnType.String,除非你打算在每一行中放置一个字符串。由于您打算将星期数(整数)用作数据点,因此ColumnType.Number是正确的选择。 – alykat 2011-06-08 15:18:56