[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.rcp] [Jface] Problem on using validator in celleditor
|
- From: ellisyu@xxxxxxxxxxx (Ellis Yu)
- Date: Wed, 15 Oct 2008 10:29:24 +0000 (UTC)
- Newsgroups: eclipse.platform.rcp
- Organization: Eclipse
- User-agent: NewsPortal/0.36 (http://florian-amrhein.de/newsportal)
Dear All,
I'm now going to write a "focus lose" validation to check my input in
celleditor which value should not be "abc". I found there's a
CellValidator function in CellEditor. Thus I get a try using it. However,
I can't make it succeed. There's a NullPointer exception if I input value
"abc" into it. Can someone kindly help that point out what's wrong in my
program? Below is my snippet. Thanks
Best Rdgs
Ellis
Snippet Code
==============
package com.pervasive.test.ui;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.jface.viewers.IElementComparer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
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.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
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.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
/**
* Example of editing inside of a table cell.
*
* @author Shawn Spiars
*
*/
public class TableEditExample2 {
private Table table;
private TableViewer tableViewer;
private final static String[] COLUMN_HEADINGS = { "Property", "Value",
"Dialog" };
public static void main(String[] args) {
new TableEditExample2();
}
public TableEditExample2() {
Display display = new Display();
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setText("Shawn Spiars' Table Edit Example");
shell.setLayout(new FillLayout());
createContents(shell);
shell.setSize(400, 400);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(1, false);
layout.verticalSpacing = 10;
composite.setLayout(layout);
GridData data = new GridData(GridData.FILL_BOTH);
data.grabExcessHorizontalSpace = true;
composite.setLayoutData(data);
table = new Table(composite, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI
| SWT.FULL_SELECTION);
table.setLinesVisible(true);
table.setHeaderVisible(true);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.heightHint = 300;
table.setLayoutData(data);
tableViewer = new TableViewer(table);
tableViewer.setUseHashlookup(false);
tableViewer.setColumnProperties(COLUMN_HEADINGS);
tableViewer.setContentProvider(new TableContentProvider());
tableViewer.setLabelProvider(new TableLabelProvider());
tableViewer.setComparer(new IElementComparer() {
public boolean equals(Object a, Object b) {
return a == b;
}
public int hashCode(Object element) {
return System.identityHashCode(element);
}
});
TableLayout tableLayout = new TableLayout();
table.setLayout(tableLayout);
tableLayout.addColumnData(new ColumnWeightData(10, 100, true));
TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
column.getColumn().setText(COLUMN_HEADINGS[0]);
column.getColumn().setAlignment(SWT.LEFT);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
// TODO Auto-generated method stub
return ((Row) element).getKey();
}
});
column.setEditingSupport(new TableCellEditingSupport(tableViewer, 0));
tableLayout.addColumnData(new ColumnWeightData(15, 200, true));
column = new TableViewerColumn(tableViewer, SWT.NONE);
column.getColumn().setText(COLUMN_HEADINGS[1]);
column.getColumn().setAlignment(SWT.LEFT);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
// TODO Auto-generated method stub
return ((Row) element).getValue();
}
});
column.setEditingSupport(new TableCellEditingSupport(tableViewer, 1));
tableLayout.addColumnData(new ColumnWeightData(15, 200, true));
column = new TableViewerColumn(tableViewer, SWT.NONE);
column.getColumn().setText(COLUMN_HEADINGS[2]);
column.getColumn().setAlignment(SWT.LEFT);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
// TODO Auto-generated method stub
return ((Row) element).getValue2();
}
});
column.setEditingSupport(new TableCellEditingSupport(tableViewer, 2));
Composite buttonComposite = new Composite(composite, SWT.NONE);
FillLayout fillLayout = new FillLayout(SWT.HORIZONTAL);
fillLayout.spacing = 10;
buttonComposite.setLayout(fillLayout);
Button addButton = new Button(buttonComposite, SWT.PUSH);
addButton.setText("Add");
addButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Row row = new Row("", "", "");
tableViewer.add(row);
table.setTopIndex(table.getItemCount());
table.select(table.getItemCount() - 1);
tableViewer.editElement(row, 0);
}
});
Button removeButton = new Button(buttonComposite, SWT.PUSH);
removeButton.setText("Remove");
removeButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ISelection selection = tableViewer.getSelection();
if (selection instanceof IStructuredSelection) {
Iterator iterator = ((IStructuredSelection) selection)
.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
tableViewer.remove(obj);
}
}
}
});
return composite;
}
public class TableLabelProvider extends LabelProvider implements
ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
Row row = (Row) element;
switch (columnIndex) {
case 0:
return row.getKey();
case 1:
return row.getValue();
case 2:
return row.getValue2();
}
return null;
}
}
public class TableContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object parent) {
List results = new ArrayList();
if (parent instanceof ArrayList) {
results = (ArrayList) parent;
}
return results.toArray();
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object
newInput) {
}
}
class TableCellEditingSupport extends EditingSupport {
private CellEditor editor;
private int column;
public TableCellEditingSupport(ColumnViewer viewer, int column) {
super(viewer);
// TODO Auto-generated constructor stub
editor = new TextCellEditor(((TableViewer) viewer).getTable());
editor.setValidator(new ICellEditorValidator() {
public String isValid(Object value) {
// TODO Auto-generated method stub
boolean isValid = false;
if (!String.valueOf(value).equals(new String("abc")))
isValid = true;
return (isValid) ? null : "Value abc is not acceptable";
}
});
this.column = column;
}
@Override
protected boolean canEdit(Object element) {
// TODO Auto-generated method stub
return true;
}
@Override
protected CellEditor getCellEditor(Object element) {
// TODO Auto-generated method stub
return editor;
}
@Override
protected Object getValue(Object element) {
// TODO Auto-generated method stub
Object result = null;
if (element instanceof Item) {
element = ((Item) element).getData();
}
Row row = (Row) element;
switch (column) {
case 0:
result = row.getKey();
break;
case 1:
result = row.getValue();
break;
case 2:
result = row.getValue2();
break;
}
return result;
}
@Override
protected void setValue(Object element, Object value) {
// TODO Auto-generated method stub
Row row = (Row) element;
String v = (String) value;
switch (column) {
case 0:
v = (String) value;
if (v.length() > 0) {
row.setKey(v);
}
break;
case 1:
v = (String) value;
if (v.length() > 0) {
row.setValue(v);
}
break;
case 2:
v = (String) value;
if (v.length() > 0) {
row.setValue2(v);
}
break;
}
getViewer().update(row, null);
}
}
class TestDialog extends DialogCellEditor {
public TestDialog(Composite parent) {
super(parent);
}
@Override
protected Object openDialogBox(Control cellEditorWindow) {
// TODO Auto-generated method stub
InputDialog dialog = new InputDialog(cellEditorWindow.getShell(),
"test", "Please input a number", "1", null);
if (dialog.open() == InputDialog.OK) {
return dialog.getValue();
}
return "";
}
}
private class Row {
private String key;
private String value;
private String value2;
public Row(String key, String value, String value2) {
setKey(key);
setValue(value);
setValue(value2);
}
public void setKey(String key) {
this.key = key;
}
public String getKey() {
return key;
}
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public String getValue2() {
return value2;
}
public void setValue2(String value2) {
this.value2 = value2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + ((key == null) ? 0 : key.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Row other = (Row) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (key == null) {
if (other.key != null)
return false;
} else if (!key.equals(other.key))
return false;
return true;
}
private TableEditExample2 getOuterType() {
return TableEditExample2.this;
}
}
}