Java tutorial
/******************************************************************************* * Copyright (c) 2012 Kai Toedter and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html. * * Contributors: * Kai Toedter - initial API and implementation ******************************************************************************/ package com.toedter.gwt.demo.contacts.client.ui; import java.util.Comparator; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import com.toedter.gwt.demo.contacts.shared.Contact; public class ContactListView2 extends Composite implements IContactListView { private static ContactListView2UiBinder uiBinder = GWT.create(ContactListView2UiBinder.class); @UiField(provided = true) CellTable<Contact> cellTable = new CellTable<Contact>(1000, (Resources) GWT.create(TableResources.class)); private List<Contact> list; private Presenter presenter; interface ContactListView2UiBinder extends UiBinder<Widget, ContactListView2> { } public ContactListView2() { initWidget(uiBinder.createAndBindUi(this)); cellTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); // Create first name column. TextColumn<Contact> firstNameColumn = new TextColumn<Contact>() { @Override public String getValue(Contact contact) { return contact.getFirstName(); } }; // Make the first name column sortable. firstNameColumn.setSortable(true); // Create last name column. TextColumn<Contact> lastNameColumn = new TextColumn<Contact>() { @Override public String getValue(Contact contact) { return contact.getLastName(); } }; // Make the last name column sortable. lastNameColumn.setSortable(true); // Add the columns. cellTable.addColumn(firstNameColumn, "First Name"); cellTable.addColumn(lastNameColumn, "Last Name"); // Create a data provider. ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact>(); // Connect the table to the data provider. dataProvider.addDataDisplay(cellTable); list = dataProvider.getList(); // Add a ColumnSortEvent.ListHandler to connect sorting to the // java.util.List. ListHandler<Contact> columnSortHandler = new ListHandler<Contact>(list); columnSortHandler.setComparator(firstNameColumn, new Comparator<Contact>() { @Override public int compare(Contact o1, Contact o2) { if (o1 == o2) { return 0; } // Compare the first name columns. if (o1 != null) { return (o2 != null) ? o1.getFirstName().compareTo(o2.getFirstName()) : 1; } return -1; } }); columnSortHandler.setComparator(lastNameColumn, new Comparator<Contact>() { @Override public int compare(Contact o1, Contact o2) { if (o1 == o2) { return 0; } // Compare the last name columns. if (o1 != null) { return (o2 != null) ? o1.getLastName().compareTo(o2.getLastName()) : 1; } return -1; } }); cellTable.addColumnSortHandler(columnSortHandler); // Add a selection model to handle user selection. final SingleSelectionModel<Contact> selectionModel = new SingleSelectionModel<Contact>(); cellTable.setSelectionModel(selectionModel); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { Contact selectedContact = selectionModel.getSelectedObject(); System.out.println("ContactListView2 .onSelectionChange()"); presenter.select(selectedContact); } }); } @Override public void setWidget(IsWidget w) { // TODO Auto-generated method stub } @Override public void setPresenter(Presenter presenter) { this.presenter = presenter; } @Override public void selectInitialRow(int i) { // not used, use setInitialContact instead } @Override public void initialize(List<Contact> contacts) { list.clear(); for (Contact contact : contacts) { list.add(contact); } // sort first names cellTable.getColumnSortList().push(cellTable.getColumn(0)); } @Override public void selectInitialContact(Contact contact) { cellTable.getSelectionModel().setSelected(contact, true); } }