showing selected row in TableViewer - bug [message #98736] |
Thu, 17 July 2008 04:09  |
Eclipse User |
|
|
|
Run snippet and then click to button "generate random input" several
times and you will see that in some case isn't show blue color on
selected row in table. But all others things works well (listeners).
Problem is in RAP 1.1.0 and RAP 1.1.1 .
Rap 1.1 M3 work well in this case.
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;
public class Snippet extends ViewPart {
private TableViewer tableViewer;
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout(1, false));
final Button btn = new Button(parent, SWT.PUSH);
btn.setText("generate random input");
btn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Random r = new Random();
int itemsCount = r.nextInt(10) + 10;
List<Data> input = new ArrayList<Data>();
for (int i = 0; i < itemsCount; i++) {
input.add(new Data("random item " + r.nextInt(1000)));
}
tableViewer.setInput(input);
tableViewer.setSelection(new
StructuredSelection(input.get(0)));
}
});
final Label label = new Label(parent, SWT.None);
label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL |
GridData.GRAB_HORIZONTAL));
tableViewer = new TableViewer(parent, SWT.None);
tableViewer.getTable().setLayoutData(new
GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL |
GridData.GRAB_VERTICAL));
tableViewer.setLabelProvider(new LabelProvider());
tableViewer.setContentProvider(new IStructuredContentProvider() {
@SuppressWarnings("unchecked")
@Override
public Object[] getElements(Object inputElement) {
return ((List<Data>) inputElement).toArray();
}
@Override
public void dispose() {
//nothing
}
@Override
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
//nothing
}
});
tableViewer.addSelectionChangedListener(new
ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
Data data = (Data) ((StructuredSelection)
event.getSelection()).getFirstElement();
label.setText("selected row: " + data);
}
});
}
@Override
public void setFocus() {
tableViewer.getTable().setFocus();
}
private class Data {
private String name;
private Data(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
}
|
|
|
Re: showing selected row in TableViewer - bug [message #99110 is a reply to message #98736] |
Mon, 21 July 2008 09:12  |
Eclipse User |
|
|
|
Originally posted by: rsternberg.innoopract.com
Thanks for the snippet, Michal. I filed this bug:
241530: TableViewer#setSelection( ISelection ) does sometimes not work
https://bugs.eclipse.org/bugs/show_bug.cgi?id=241530
Best regards, Ralf
Michal NkD Nikodím wrote:
> Run snippet and then click to button "generate random input" several
> times and you will see that in some case isn't show blue color on
> selected row in table. But all others things works well (listeners).
>
> Problem is in RAP 1.1.0 and RAP 1.1.1 .
> Rap 1.1 M3 work well in this case.
>
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Random;
>
> import org.eclipse.jface.viewers.ISelectionChangedListener;
> import org.eclipse.jface.viewers.IStructuredContentProvider;
> import org.eclipse.jface.viewers.LabelProvider;
> import org.eclipse.jface.viewers.SelectionChangedEvent;
> import org.eclipse.jface.viewers.StructuredSelection;
> import org.eclipse.jface.viewers.TableViewer;
> import org.eclipse.jface.viewers.Viewer;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.events.SelectionAdapter;
> import org.eclipse.swt.events.SelectionEvent;
> import org.eclipse.swt.layout.GridData;
> import org.eclipse.swt.layout.GridLayout;
> import org.eclipse.swt.widgets.Button;
> import org.eclipse.swt.widgets.Composite;
> import org.eclipse.swt.widgets.Label;
> import org.eclipse.ui.part.ViewPart;
>
> public class Snippet extends ViewPart {
>
> private TableViewer tableViewer;
>
> @Override
> public void createPartControl(Composite parent) {
>
> parent.setLayout(new GridLayout(1, false));
>
> final Button btn = new Button(parent, SWT.PUSH);
> btn.setText("generate random input");
> btn.addSelectionListener(new SelectionAdapter() {
> @Override
> public void widgetSelected(SelectionEvent e) {
> Random r = new Random();
> int itemsCount = r.nextInt(10) + 10;
> List<Data> input = new ArrayList<Data>();
> for (int i = 0; i < itemsCount; i++) {
> input.add(new Data("random item " + r.nextInt(1000)));
> }
> tableViewer.setInput(input);
> tableViewer.setSelection(new
> StructuredSelection(input.get(0)));
> }
> });
>
> final Label label = new Label(parent, SWT.None);
> label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL |
> GridData.GRAB_HORIZONTAL));
>
> tableViewer = new TableViewer(parent, SWT.None);
> tableViewer.getTable().setLayoutData(new
> GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL |
> GridData.GRAB_VERTICAL));
> tableViewer.setLabelProvider(new LabelProvider());
> tableViewer.setContentProvider(new IStructuredContentProvider() {
>
> @SuppressWarnings("unchecked")
> @Override
> public Object[] getElements(Object inputElement) {
> return ((List<Data>) inputElement).toArray();
> }
>
> @Override
> public void dispose() {
> //nothing
> }
>
> @Override
> public void inputChanged(Viewer viewer, Object oldInput,
> Object newInput) {
> //nothing
> }
> });
> tableViewer.addSelectionChangedListener(new
> ISelectionChangedListener() {
> @Override
> public void selectionChanged(SelectionChangedEvent event) {
> Data data = (Data) ((StructuredSelection)
> event.getSelection()).getFirstElement();
> label.setText("selected row: " + data);
> }
> });
>
> }
>
> @Override
> public void setFocus() {
> tableViewer.getTable().setFocus();
> }
>
> private class Data {
> private String name;
>
> private Data(String name) {
> this.name = name;
> }
>
> @Override
> public String toString() {
> return name;
> }
> }
>
> }
|
|
|
Powered by
FUDForum. Page generated in 0.04172 seconds