GWT - 如何在CellTable或DataGrid中显示String [] []数组

时间:2013-02-27 20:49:42

标签: gwt-celltable

我在String[][]中显示一个大的FlexTable数组,但速度非常慢。 如何在CellTableDataGrid中显示数组?

示例显示CellTable< some class>,但我只想要CellTable< String>CellTable< String[]>CellTable< List< String> >之类的内容。

1 个答案:

答案 0 :(得分:0)

我通过修改Google的ListDataProviderExample来使用C​​ellTable解决了这个问题。由于在编译时不知道Columns的数量,我使用了Juan Pablo Gardella(Create GWT CellTable Dynamically)提到的Thomas Broyer(https://groups.google.com/forum/?fromgroups=#!topic/google-web-toolkit/v6vZT0eUQKU)的IndexedColumn类。这是我的测试代码:

package com.google.gwt.examples.view.client;

import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListDataProviderExample implements EntryPoint {

  String[][] rowsA = {{"aaaaa","bbbbb","ccccc"}, 
    {"111", "222", "333"}, {"A", "B", "C"}};

  public void onModuleLoad() {
    // Create a CellTable.
    CellTable<List<String>> table = new CellTable<List<String>>();

    // Get the rows as List
    int nrows = rowsA.length;
    int ncols = rowsA[0].length;
    ArrayList rowsL = new ArrayList(nrows);
    //List rowsL = new ArrayList(nrows);
    for (int irow = 0; irow < nrows; irow++) {
        List<String> rowL = Arrays.asList(rowsA[irow]);
        rowsL.add(rowL);
    }

    // Create table columns
    for (int icol = 0; icol < ncols; icol++) {
        table.addColumn(new IndexedColumn(icol), 
              new TextHeader(rowsA[0][icol]));
    }

    // Create a list data provider.
    final ListDataProvider<List<String>> dataProvider 
      = new ListDataProvider<List<String>>(rowsL);

    // Add the table to the dataProvider.
    dataProvider.addDataDisplay(table);

    // Add the widgets to the root panel.
    VerticalPanel vPanel = new VerticalPanel();
    vPanel.add(table);
    RootPanel.get().add(vPanel);
  }
}

class IndexedColumn extends Column<List<String>, String> {
    private final int index;
    public IndexedColumn(int index) {
        super(new TextCell());
        this.index = index;
    }
    @Override
    public String getValue(List<String> object) {
        return object.get(this.index);
    }
}