GWT 2.1 CellTable列标题单击事件

有没有办法将clickHandlers(或任何类型的处理程序)添加到CellTable中列的标题 ? 我想为我的CellTable添加一些排序function,我没有看到Column或Header类中允许这样做的任何方法。 我用这篇文章来弄清楚如何使用CellTable。

在CellTable上还没有开箱即用的支持排序方式。 然而,有一个涉及大量代码苦差事的手动解决方法。 请参阅费用样本中的自行车棚中的SortableHeaderSortableColumn类。 您可以在com.google.gwt.sample.expenses.gwt.client.ExpenseDetails找到该用法。 您可以使用它,直到下一个版本中出现具体内容。

检查目录: http : //google-web-toolkit.googlecode.com/svn/trunk/bikeshed

点击事件的解决方法:

 Header columnHeader = new Header(new ClickableTextCell()) { @Override public String getValue() { return columnName; } }; columnHeader.setUpdater(new ValueUpdater() { @Override public void update(String value) { Window.alert("Header clicked!"); } }); table.addColumn(column, columnHeader); 

随着GWT 2.1的最终版本,是否有任何支持可添加到CellTable的可排序列? 或者在查看bikeshed示例后,它仍然是您自己的解决方案吗?

  CellTable table = new CellTable(); // Create name column. final TextColumn nameColumn = new TextColumn() { @Override public String getValue(Contact contact) { return contact.name; } }; // Create a data provider. ListDataProvider dataProvider = new ListDataProvider(); // Connect the table to the data provider. dataProvider.addDataDisplay(table); final List list = dataProvider.getList(); for (Contact contact : CONTACTS) { list.add(contact); } final ListHandler columnSortHandler = new ListHandler( list); Header columnHeader = new Header(new ClickableTextCell()) { @Override public String getValue() { return "Name"; } }; columnHeader.setUpdater(new ValueUpdater() { @Override public void update(String value) { if (Window.confirm("Want to do?")){ nameColumn.setSortable(true); columnSortHandler.setComparator(nameColumn, new Comparator() { public int compare(Contact o1, Contact o2) { if (o1 == o2) { return 0; } // Compare the name columns. if (o1 != null) { return (o2 != null) ? o1.name.compareTo(o2.name) : 1; } return -1; } }); } else nameColumn.setSortable(false); } }); // Make the name column sortable. nameColumn.setSortable(false); // Create address column. TextColumn addressColumn = new TextColumn() { @Override public String getValue(Contact contact) { return contact.address; } }; // Add the columns. table.addColumn(nameColumn, columnHeader); table.addColumn(addressColumn, "Address"); // Add the data to the data provider, which automatically pushes it to the // widget. // Add a ColumnSortEvent.ListHandler to connect sorting to the // java.util.List. //------------------ Code to add --------------------------------// VerticalPanel vp = new VerticalPanel(); table.addColumnSortHandler(columnSortHandler); //------------------ Code end --------------------------------// // We know that the data is sorted alphabetically by default. table.getColumnSortList().push(nameColumn); // Add it to the root panel. vp.add(table); RootPanel.get().add(vp);