/******************************************************************************* * Copyright (c) 2012 Original authors 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: * Original authors and others - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.examples.examples._120_Selection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.nebula.widgets.nattable.data.IColumnPropertyAccessor; import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider; import org.eclipse.nebula.widgets.nattable.data.ListDataProvider; import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor; import org.eclipse.nebula.widgets.nattable.examples.AbstractNatExample; import org.eclipse.nebula.widgets.nattable.examples.runner.StandaloneNatExampleRunner; import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider; import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultGridLayer; import org.eclipse.nebula.widgets.nattable.selection.RowSelectionProvider; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; public class Get_and_set_selected_objects extends AbstractNatExample { public static void main(String[] args) { StandaloneNatExampleRunner.run(400, 200, new Get_and_set_selected_objects()); } @Override public String getDescription() { return "This example shows how to listen to row selection events in NatTable via the " + "JFace selection api. This is done via the RowSelectionProvider adapter class. " + "This example demonstrates the default RowSelectionProvider behavior, which is " + "to only report rows that are fully selected. The RowSelectionProvider can also " + "be configured to return any row that has a selected cell in it (see source code)."; } @Override public Control createExampleControl(Composite parent) { Person homer = new Person("Homer", "Simpson", "Sargeant", 1234567890L); Person smithers = new Person("Waylon", "Smithers", "Admiral", 6666666666L); Person bart = new Person("Bart", "Smithers", "General", 9125798342L); Person nelson = new Person("Nelson", "Muntz", "Private", 0000000001L); Person frink = new Person("John", "Frink", "Lieutenant", 3141592654L); List<Person> myList = new ArrayList<>(); myList.add(homer); myList.add(smithers); myList.add(bart); myList.add(nelson); myList.add(frink); String[] propertyNames = { "firstName", "lastName", "rank", "serialNumber" }; IColumnPropertyAccessor<Person> columnPropertyAccessor = new ReflectiveColumnPropertyAccessor<>( propertyNames); IRowDataProvider<Person> bodyDataProvider = new ListDataProvider<>( myList, columnPropertyAccessor); DefaultGridLayer gridLayer = new DefaultGridLayer(bodyDataProvider, new DefaultColumnHeaderDataProvider(propertyNames)); NatTable natTable = new NatTable(parent, gridLayer); ISelectionProvider selectionProvider = new RowSelectionProvider<>( gridLayer.getBodyLayer().getSelectionLayer(), bodyDataProvider, false); // Provides rows where any cell in the row is selected selectionProvider .addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { System.out.println("Selection changed:"); IStructuredSelection selection = (IStructuredSelection) event .getSelection(); @SuppressWarnings("rawtypes") Iterator it = selection.iterator(); while (it.hasNext()) { System.out.println(" " + it.next()); } } }); // Programmatically select a few rows selectionProvider.setSelection(new StructuredSelection(new Person[] { homer, smithers, nelson })); // I changed my mind. Select a few other rows selectionProvider.setSelection(new StructuredSelection(new Person[] { bart, frink })); return natTable; } public class Person { private String firstName; private String lastName; private String rank; private long serialNumber; public Person(String firstName, String lastName, String rank, long serialNumber) { this.firstName = firstName; this.lastName = lastName; this.rank = rank; this.serialNumber = serialNumber; } public String getFirstName() { return this.firstName; } public String getLastName() { return this.lastName; } public String getRank() { return this.rank; } public long getSerialNumber() { return this.serialNumber; } @Override public String toString() { return this.firstName + " " + this.lastName + " " + this.rank + " " + this.serialNumber; } } }