|
GWT 2.4.0 | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.google.gwt.user.client.ui.UIObject
com.google.gwt.user.client.ui.Widget
com.google.gwt.user.client.ui.Composite
com.google.gwt.user.cellview.client.AbstractHasData<T>
com.google.gwt.user.cellview.client.AbstractCellTable<T>
com.google.gwt.user.cellview.client.CellTable<T>
T
- the data type of each rowpublic class CellTable<T>
A tabular view that supports paging and columns.
Column
class defines the
Cell
used to render a column. Implement
Column.getValue(Object)
to retrieve the field value from the row
object that will be rendered in the Cell
.
Header
can be placed at the top
(header) or bottom (footer) of the CellTable
. You can specify a
header as text using AbstractCellTable.addColumn(Column, String)
, or you can create a
custom Header
that can change with the value of the cells, such as a
column total. The Header
will be rendered every time the row data
changes or the table is redrawn. If you pass the same header instance (==)
into adjacent columns, the header will span the columns.
public class CellTableExample implements EntryPoint { /** * A simple data type that represents a contact. */ private static class Contact { private final String address; private final Date birthday; private final String name; public Contact(String name, Date birthday, String address) { this.name = name; this.birthday = birthday; this.address = address; } } /** * The list of data to display. */ private static final List<Contact> CONTACTS = Arrays.asList( new Contact("John", new Date(80, 4, 12), "123 Fourth Avenue"), new Contact("Joe", new Date(85, 2, 22), "22 Lance Ln"), new Contact("George", new Date(46, 6, 6), "1600 Pennsylvania Avenue")); public void onModuleLoad() { // Create a CellTable. CellTable<Contact> table = new CellTable<Contact>(); table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); // Add a text column to show the name. TextColumn<Contact> nameColumn = new TextColumn<Contact>() { @Override public String getValue(Contact object) { return object.name; } }; table.addColumn(nameColumn, "Name"); // Add a date column to show the birthday. DateCell dateCell = new DateCell(); Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) { @Override public Date getValue(Contact object) { return object.birthday; } }; table.addColumn(dateColumn, "Birthday"); // Add a text column to show the address. TextColumn<Contact> addressColumn = new TextColumn<Contact>() { @Override public String getValue(Contact object) { return object.address; } }; table.addColumn(addressColumn, "Address"); // Add a selection model to handle user selection. final SingleSelectionModel<Contact> selectionModel = new SingleSelectionModel<Contact>(); table.setSelectionModel(selectionModel); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { Contact selected = selectionModel.getSelectedObject(); if (selected != null) { Window.alert("You selected: " + selected.name); } } }); // Set the total row count. This isn't strictly necessary, but it affects // paging calculations, so its good habit to keep the row count up to date. table.setRowCount(CONTACTS.size(), true); // Push the data into the widget. table.setRowData(0, CONTACTS); // Add it to the root panel. RootPanel.get().add(table); } }
public class CellTableFieldUpdaterExample implements EntryPoint { /** * A simple data type that represents a contact with a unique ID. */ private static class Contact { private static int nextId = 0; private final int id; private String name; public Contact(String name) { nextId++; this.id = nextId; this.name = name; } } /** * The list of data to display. */ private static final List<Contact> CONTACTS = Arrays.asList(new Contact("John"), new Contact( "Joe"), new Contact("George")); /** * The key provider that allows us to identify Contacts even if a field * changes. We identify contacts by their unique ID. */ private static final ProvidesKey<Contact> KEY_PROVIDER = new ProvidesKey<CellTableFieldUpdaterExample.Contact>() { @Override public Object getKey(Contact item) { return item.id; } }; @Override public void onModuleLoad() { // Create a CellTable with a key provider. final CellTable<Contact> table = new CellTable<Contact>(KEY_PROVIDER); // Add a text input column to edit the name. final TextInputCell nameCell = new TextInputCell(); Column<Contact, String> nameColumn = new Column<Contact, String>(nameCell) { @Override public String getValue(Contact object) { // Return the name as the value of this column. return object.name; } }; table.addColumn(nameColumn, "Name"); // Add a field updater to be notified when the user enters a new name. nameColumn.setFieldUpdater(new FieldUpdater<Contact, String>() { @Override public void update(int index, Contact object, String value) { // Inform the user of the change. Window.alert("You changed the name of " + object.name + " to " + value); // Push the changes into the Contact. At this point, you could send an // asynchronous request to the server to update the database. object.name = value; // Redraw the table with the new data. table.redraw(); } }); // Push the data into the widget. table.setRowData(CONTACTS); // Add it to the root panel. RootPanel.get().add(table); } }
public class CellTableFieldUpdaterExampleComplex implements EntryPoint { /** * A simple data type that represents a contact with a unique ID. */ private static class Contact { private static int nextId = 0; private final int id; private final String address; private Date birthday; private String name; public Contact(String name, Date birthday, String address) { nextId++; this.id = nextId; this.name = name; this.birthday = birthday; this.address = address; } } /** * The list of data to display. */ private static final List<Contact> CONTACTS = Arrays.asList( new Contact("John", new Date(80, 4, 12), "123 Fourth Avenue"), new Contact("Joe", new Date(85, 2, 22), "22 Lance Ln"), new Contact("George", new Date(46, 6, 6), "1600 Pennsylvania Avenue")); /** * The key provider that allows us to identify Contacts even if a field * changes. We identify contacts by their unique ID. */ private static final ProvidesKey<Contact> KEY_PROVIDER = new ProvidesKey<CellTableFieldUpdaterExampleComplex.Contact>() { @Override public Object getKey(Contact item) { return item.id; } }; @Override public void onModuleLoad() { // Create a CellTable with a key provider. final CellTable<Contact> table = new CellTable<Contact>(KEY_PROVIDER); table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); // Add a text input column to edit the name. final TextInputCell nameCell = new TextInputCell(); Column<Contact, String> nameColumn = new Column<Contact, String>(nameCell) { @Override public String getValue(Contact object) { return object.name; } }; table.addColumn(nameColumn, "Name"); // Add a field updater to be notified when the user enters a new name. nameColumn.setFieldUpdater(new FieldUpdater<Contact, String>() { @Override public void update(int index, Contact object, String value) { // Validate the data. if (value.length() < 3) { Window.alert("Names must be at least three characters long."); /* * Clear the view data. The view data contains the pending change and * allows the table to render with the pending value until the data is * committed. If the data is committed into the object, the view data * is automatically cleared out. If the data is not committed because * it is invalid, you must delete. */ nameCell.clearViewData(KEY_PROVIDER.getKey(object)); // Redraw the table. table.redraw(); return; } // Inform the user of the change. Window.alert("You changed the name of " + object.name + " to " + value); // Push the changes into the Contact. At this point, you could send an // asynchronous request to the server to update the database. object.name = value; // Redraw the table with the new data. table.redraw(); } }); // Add a date column to show the birthday. Column<Contact, Date> dateColumn = new Column<Contact, Date>( new DatePickerCell()) { @Override public Date getValue(Contact object) { return object.birthday; } }; table.addColumn(dateColumn, "Birthday"); // Add a field updater to be notified when the user enters a new birthday. dateColumn.setFieldUpdater(new FieldUpdater<Contact, Date>() { @Override public void update(int index, Contact object, Date value) { Window.alert("You changed the birthday of " + object.name + " to " + DateTimeFormat.getFormat(PredefinedFormat.DATE_LONG).format(value)); // Push the changes into the Contact. object.birthday = value; // Redraw the table with the new data. table.redraw(); } }); // Add a text column to show the address. TextColumn<Contact> addressColumn = new TextColumn<Contact>() { @Override public String getValue(Contact object) { return object.address; } }; table.addColumn(addressColumn, "Address"); // Set the total row count. This isn't strictly necessary, but it affects // paging calculations, so its good habit to keep the row count up to date. table.setRowCount(CONTACTS.size(), true); // Push the data into the widget. table.setRowData(0, CONTACTS); // Add it to the root panel. RootPanel.get().add(table); } }
List
)public class ListDataProviderExample implements EntryPoint { public void onModuleLoad() { // Create a CellList. CellList<String> cellList = new CellList<String>(new TextCell()); // Create a list data provider. final ListDataProvider<String> dataProvider = new ListDataProvider<String>(); // Add the cellList to the dataProvider. dataProvider.addDataDisplay(cellList); // Create a form to add values to the data provider. final TextBox valueBox = new TextBox(); valueBox.setText("Enter new value"); Button addButton = new Button("Add value", new ClickHandler() { public void onClick(ClickEvent event) { // Get the value from the text box. String newValue = valueBox.getText(); // Get the underlying list from data dataProvider. List<String> list = dataProvider.getList(); // Add the value to the list. The dataProvider will update the cellList. list.add(newValue); } }); // Add the widgets to the root panel. VerticalPanel vPanel = new VerticalPanel(); vPanel.add(valueBox); vPanel.add(addButton); vPanel.add(cellList); RootPanel.get().add(vPanel); } }
public class AsyncDataProviderExample implements EntryPoint { /** * A custom {@link AsyncDataProvider}. */ private static class MyDataProvider extends AsyncDataProvider<String> { /** * {@link #onRangeChanged(HasData)} is called when the table requests a new * range of data. You can push data back to the displays using * {@link #updateRowData(int, List)}. */ @Override protected void onRangeChanged(HasData<String> display) { // Get the new range. final Range range = display.getVisibleRange(); /* * Query the data asynchronously. If you are using a database, you can * make an RPC call here. We'll use a Timer to simulate a delay. */ new Timer() { @Override public void run() { // We are creating fake data. Normally, the data will come from a // server. int start = range.getStart(); int length = range.getLength(); List<String> newData = new ArrayList<String>(); for (int i = start; i < start + length; i++) { newData.add("Item " + i); } // Push the data to the displays. AsyncDataProvider will only update // displays that are within range of the data. updateRowData(start, newData); } }.schedule(3000); } } public void onModuleLoad() { // Create a CellList. CellList<String> cellList = new CellList<String>(new TextCell()); // Create a data provider. MyDataProvider dataProvider = new MyDataProvider(); // Add the cellList to the dataProvider. dataProvider.addDataDisplay(cellList); // Create paging controls. SimplePager pager = new SimplePager(); pager.setDisplay(cellList); // Add the widgets to the root panel. VerticalPanel vPanel = new VerticalPanel(); vPanel.add(pager); vPanel.add(cellList); RootPanel.get().add(vPanel); } }
public class RangeChangeHandlerExample implements EntryPoint { @Override public void onModuleLoad() { // Create a CellList. final CellList<String> cellList = new CellList<String>(new TextCell()); // Add a range change handler. cellList.addRangeChangeHandler(new RangeChangeEvent.Handler() { @Override public void onRangeChange(RangeChangeEvent event) { Range range = event.getNewRange(); int start = range.getStart(); int length = range.getLength(); // Create the data to push into the view. At this point, you could send // an asynchronous RPC request to a server. List<String> data = new ArrayList<String>(); for (int i = start; i < start + length; i++) { data.add("Item " + i); } // Push the data into the list. cellList.setRowData(start, data); } }); // Force the cellList to fire an initial range change event. cellList.setVisibleRangeAndClearData(new Range(0, 25), true); // Create paging controls. SimplePager pager = new SimplePager(); pager.setDisplay(cellList); // Add the widgets to the root panel. VerticalPanel vPanel = new VerticalPanel(); vPanel.add(pager); vPanel.add(cellList); RootPanel.get().add(vPanel); } }
public class KeyProviderExample implements EntryPoint { /** * A simple data type that represents a contact. */ private static class Contact { private static int nextId = 0; private final int id; private String name; public Contact(String name) { nextId++; this.id = nextId; this.name = name; } } /** * A custom {@link Cell} used to render a {@link Contact}. */ private static class ContactCell extends AbstractCell<Contact> { @Override public void render(Context context, Contact value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.name); } } } /** * The list of data to display. */ private static final List<Contact> CONTACTS = Arrays.asList(new Contact( "John"), new Contact("Joe"), new Contact("Michael"), new Contact("Sarah"), new Contact("George")); public void onModuleLoad() { /* * Define a key provider for a Contact. We use the unique ID as the key, * which allows to maintain selection even if the name changes. */ ProvidesKey<Contact> keyProvider = new ProvidesKey<Contact>() { public Object getKey(Contact item) { // Always do a null check. return (item == null) ? null : item.id; } }; // Create a CellList using the keyProvider. CellList<Contact> cellList = new CellList<Contact>(new ContactCell(), keyProvider); // Push data into the CellList. cellList.setRowCount(CONTACTS.size(), true); cellList.setRowData(0, CONTACTS); // Add a selection model using the same keyProvider. SelectionModel<Contact> selectionModel = new SingleSelectionModel<Contact>( keyProvider); cellList.setSelectionModel(selectionModel); /* * Select a contact. The selectionModel will select based on the ID because * we used a keyProvider. */ Contact sarah = CONTACTS.get(3); selectionModel.setSelected(sarah, true); // Modify the name of the contact. sarah.name = "Sara"; /* * Redraw the CellList. Sarah/Sara will still be selected because we * identify her by ID. If we did not use a keyProvider, Sara would not be * selected. */ cellList.redraw(); // Add the widgets to the root panel. RootPanel.get().add(cellList); } }
Nested Class Summary | |
---|---|
static interface |
CellTable.BasicResources
Resources that match the GWT standard style theme. |
static interface |
CellTable.Resources
A ClientBundle that provides images for this widget. |
static interface |
CellTable.Style
Styles used by this widget. |
Nested classes/interfaces inherited from class com.google.gwt.user.client.ui.UIObject |
---|
UIObject.DebugIdImpl, UIObject.DebugIdImplEnabled |
Nested classes/interfaces inherited from interface com.google.gwt.user.cellview.client.HasKeyboardPagingPolicy |
---|
HasKeyboardPagingPolicy.KeyboardPagingPolicy |
Nested classes/interfaces inherited from interface com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy |
---|
HasKeyboardSelectionPolicy.KeyboardSelectionPolicy |
Field Summary |
---|
Fields inherited from class com.google.gwt.user.client.ui.UIObject |
---|
DEBUG_ID_PREFIX |
Constructor Summary | |
---|---|
CellTable()
Constructs a table with a default page size of 15. |
|
CellTable(int pageSize)
Constructs a table with the given page size. |
|
CellTable(int pageSize,
CellTable.Resources resources)
Constructs a table with the given page size with the specified CellTable.BasicResources . |
|
CellTable(int pageSize,
CellTable.Resources resources,
ProvidesKey<T> keyProvider)
Constructs a table with the given page size, the specified CellTable.BasicResources , and the given key provider. |
|
CellTable(int pageSize,
CellTable.Resources resources,
ProvidesKey<T> keyProvider,
Widget loadingIndicator)
Constructs a table with the specified page size, CellTable.BasicResources , key
provider, and loading indicator. |
|
CellTable(int pageSize,
ProvidesKey<T> keyProvider)
Constructs a table with the given page size and the given key provider . |
|
CellTable(ProvidesKey<T> keyProvider)
Constructs a table with a default page size of 15, and the given key provider . |
Method Summary | |
---|---|
void |
addColumnStyleName(int index,
java.lang.String styleName)
Add a style name to the col element at the specified index,
creating it if necessary. |
protected void |
doSetColumnWidth(int column,
java.lang.String width)
Set the width of a column. |
protected void |
doSetHeaderVisible(boolean isFooter,
boolean isVisible)
Show or hide a header section. |
int |
getBodyHeight()
Return the height of the table body. |
int |
getHeaderHeight()
Return the height of the table header. |
protected TableSectionElement |
getTableBodyElement()
Get the tbody element that contains the render row values. |
protected TableSectionElement |
getTableFootElement()
Get the tfoot element that contains the footers. |
protected TableSectionElement |
getTableHeadElement()
Get the thead element that contains theh eaders. |
protected void |
onLoadingStateChanged(LoadingStateChangeEvent.LoadingState state)
Called when the loading state changes. |
protected void |
refreshColumnWidths()
|
void |
removeColumnStyleName(int index,
java.lang.String styleName)
Remove a style from the col element at the specified index. |
void |
setColumnWidth(Column<T,?> column,
double width,
Style.Unit unit)
Set the width of a Column . |
void |
setColumnWidth(Column<T,?> column,
java.lang.String width)
Set the width of a Column . |
void |
setEmptyTableWidget(Widget widget)
Set the widget to display when the table has no rows. |
void |
setLoadingIndicator(Widget widget)
Set the widget to display when the data is loading. |
void |
setTableLayoutFixed(boolean isFixed)
Enable or disable fixed table layout. |
void |
setWidth(java.lang.String width,
boolean isFixedLayout)
Set the width of the width and specify whether or not it should use fixed table layout. |
Methods inherited from class com.google.gwt.user.client.ui.Composite |
---|
getWidget, initWidget, isAttached, onAttach, onDetach, performDetachedInitialization, render, render, resolvePotentialElement, setWidget, wrapElement |
Methods inherited from class com.google.gwt.user.client.ui.Widget |
---|
addAttachHandler, addBitlessDomHandler, addDomHandler, addHandler, asWidget, asWidgetOrNull, createHandlerManager, delegateEvent, doAttachChildren, doDetachChildren, fireEvent, getHandlerCount, getLayoutData, getParent, isOrWasAttached, onLoad, removeFromParent, setLayoutData, sinkEvents |
Methods inherited from class com.google.gwt.user.client.ui.UIObject |
---|
addStyleDependentName, addStyleName, ensureDebugId, ensureDebugId, ensureDebugId, getAbsoluteLeft, getAbsoluteTop, getElement, getOffsetHeight, getOffsetWidth, getStyleElement, getStyleName, getStyleName, getStylePrimaryName, getStylePrimaryName, getTitle, isVisible, isVisible, onEnsureDebugId, removeStyleDependentName, removeStyleName, setElement, setElement, setHeight, setPixelSize, setSize, setStyleDependentName, setStyleName, setStyleName, setStyleName, setStyleName, setStylePrimaryName, setStylePrimaryName, setTitle, setVisible, setVisible, setWidth, sinkBitlessEvent, toString, unsinkEvents |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface com.google.gwt.event.shared.HasHandlers |
---|
fireEvent |
Constructor Detail |
---|
public CellTable()
public CellTable(int pageSize)
pageSize
- the page sizepublic CellTable(ProvidesKey<T> keyProvider)
key provider
.
keyProvider
- an instance of ProvidesKeypublic CellTable(int pageSize, CellTable.Resources resources)
CellTable.BasicResources
.
pageSize
- the page sizeresources
- the resources to use for this widgetpublic CellTable(int pageSize, ProvidesKey<T> keyProvider)
key provider
.
pageSize
- the page sizekeyProvider
- an instance of ProvidesKeypublic CellTable(int pageSize, CellTable.Resources resources, ProvidesKey<T> keyProvider)
CellTable.BasicResources
, and the given key provider.
pageSize
- the page sizeresources
- the resources to use for this widgetkeyProvider
- an instance of ProvidesKeypublic CellTable(int pageSize, CellTable.Resources resources, ProvidesKey<T> keyProvider, Widget loadingIndicator)
CellTable.BasicResources
, key
provider, and loading indicator.
pageSize
- the page sizeresources
- the resources to use for this widgetkeyProvider
- an instance of ProvidesKeyloadingIndicator
- the widget to use as a loading indicator, or null
to disableMethod Detail |
---|
public void addColumnStyleName(int index, java.lang.String styleName)
AbstractCellTable
col
element at the specified index,
creating it if necessary.
addColumnStyleName
in class AbstractCellTable<T>
index
- the column indexstyleName
- the style name to addpublic int getBodyHeight()
public int getHeaderHeight()
public void removeColumnStyleName(int index, java.lang.String styleName)
AbstractCellTable
col
element at the specified index.
removeColumnStyleName
in class AbstractCellTable<T>
index
- the column indexstyleName
- the style name to removepublic void setColumnWidth(Column<T,?> column, java.lang.String width)
Column
.
The layout behavior depends on whether or not the table is using fixed layout.
setColumnWidth
in class AbstractCellTable<T>
column
- the columnwidth
- the width of the columnsetTableLayoutFixed(boolean)
public void setColumnWidth(Column<T,?> column, double width, Style.Unit unit)
Column
.
The layout behavior depends on whether or not the table is using fixed layout.
setColumnWidth
in class AbstractCellTable<T>
column
- the columnwidth
- the width of the columnunit
- the Style.Unit
of measurementsetTableLayoutFixed(boolean)
public void setEmptyTableWidget(Widget widget)
AbstractCellTable
setEmptyTableWidget
in class AbstractCellTable<T>
widget
- the empty table widget, or null to disablepublic void setLoadingIndicator(Widget widget)
AbstractCellTable
setLoadingIndicator
in class AbstractCellTable<T>
widget
- the loading indicator, or null to disablepublic void setTableLayoutFixed(boolean isFixed)
Enable or disable fixed table layout.
isFixed
- true to use fixed table layout, false not topublic final void setWidth(java.lang.String width, boolean isFixedLayout)
setTableLayoutFixed(boolean)
for more
information about fixed layout tables.
width
- the width of the tableisFixedLayout
- true to use fixed width layout, false not tosetTableLayoutFixed(boolean)
,
W3C HTML
Specificationprotected void doSetColumnWidth(int column, java.lang.String width)
AbstractCellTable
doSetColumnWidth
in class AbstractCellTable<T>
column
- the column indexwidth
- the width, or null to clear the widthprotected void doSetHeaderVisible(boolean isFooter, boolean isVisible)
AbstractCellTable
doSetHeaderVisible
in class AbstractCellTable<T>
isFooter
- true for the footer, false for the headerisVisible
- true to show, false to hideprotected TableSectionElement getTableBodyElement()
AbstractCellTable
getTableBodyElement
in class AbstractCellTable<T>
protected TableSectionElement getTableFootElement()
AbstractCellTable
getTableFootElement
in class AbstractCellTable<T>
protected TableSectionElement getTableHeadElement()
AbstractCellTable
getTableHeadElement
in class AbstractCellTable<T>
protected void onLoadingStateChanged(LoadingStateChangeEvent.LoadingState state)
onLoadingStateChanged
in class AbstractHasData<T>
state
- the new loading stateprotected void refreshColumnWidths()
refreshColumnWidths
in class AbstractCellTable<T>
|
GWT 2.4.0 | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |