我想让我的桌面浏览器可编辑。我决定使用setEditingSupport和EdittingSupport。但表内容存储在一个字符串数组中,该数组没有setter和getter。如何在类中的getValue()和setValue()中编写代码扩展EdittingSupport? tableviewer的代码如下所示:
public class DatatypePage extends WizardPage
{
public static final String NAME = "type";
private MigratorWizard wizard;
private TableViewer tableViewer;
protected DatatypePage(MigratorWizard wizard)
{
super(NAME);
this.wizard = wizard;
setTitle("Data Type");
setDescription("This is a data type page");
}
@Override
public void createControl(Composite parent)
{
Composite compositeContent = new Composite(parent, SWT.NONE);
setControl(compositeContent);
//super.createControl(parent);
//updatePage(rbtnDatatype);
compositeContent.setLayout(new FormLayout());
Button btnEditConstraint = new Button(compositeContent, SWT.NONE);
FormData fd_btnEditConstraint = new FormData();
fd_btnEditConstraint.left = new FormAttachment(0, 287);
btnEditConstraint.setLayoutData(fd_btnEditConstraint);
btnEditConstraint.setText("Edit Constraint");
Button btnAddConstraint = new Button(compositeContent, SWT.NONE);
fd_btnEditConstraint.top = new FormAttachment(btnAddConstraint, 0, SWT.TOP);
fd_btnEditConstraint.right = new FormAttachment(btnAddConstraint, -63);
FormData fd_btnAddConstraint = new FormData();
fd_btnAddConstraint.bottom = new FormAttachment(100);
fd_btnAddConstraint.left = new FormAttachment(0, 500);
btnAddConstraint.setLayoutData(fd_btnAddConstraint);
btnAddConstraint.setText("Add Constraint");
btnAddConstraint.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
}
});
Button btnDeleteConstraint = new Button(compositeContent, SWT.NONE);
fd_btnAddConstraint.right = new FormAttachment(btnDeleteConstraint, -60);
FormData fd_btnDeleteConstraint = new FormData();
fd_btnDeleteConstraint.left = new FormAttachment(0, 710);
fd_btnDeleteConstraint.right = new FormAttachment(100, -2);
fd_btnDeleteConstraint.bottom = new FormAttachment(100);
btnDeleteConstraint.setLayoutData(fd_btnDeleteConstraint);
btnDeleteConstraint.setText("Delete Constraint");
btnDeleteConstraint.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ISelection selection = tableViewer.getSelection();
logger.debug("datatype selected");
if (selection != null || selection instanceof IStructuredSelection) {
IStructuredSelection sel = (IStructuredSelection) selection;
Iterator iterator = sel.iterator();
while(iterator.hasNext()) {
Object obj = iterator.next();
tableViewer.remove(obj);
}
}
}
});
tableViewer = new TableViewer(compositeContent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
Table table = tableViewer.getTable();
FormData fd_table = new FormData();
fd_table.bottom = new FormAttachment(btnEditConstraint, -6);
fd_table.top = new FormAttachment(0);
fd_table.left = new FormAttachment(0);
fd_table.right = new FormAttachment(100);
table.setLayoutData(fd_table);
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableViewerColumn tcolOracle = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn tcOracle = tcolOracle.getColumn();
tcOracle.setText("oracle");
tcOracle.setWidth(300);
tcolOracle.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
String[] t = (String[]) element;
return t[0];
}
});
tcolOracle.setEditingSupport(new FirstColEdittingSupport(tableViewer));
TableViewerColumn tcolHighgo = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn tcHighgo = tcolHighgo.getColumn();
tcHighgo.setText("hgdb");
tcHighgo.setWidth(300);
tcolHighgo.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
String[] t = (String[]) element;
return t[1];
}
});
initConfig();
}
private void initConfig()
{
tableViewer.setContentProvider(new ArrayContentProvider());
//tableViewer.setInput(DataTypeFactory.getInstance().getCastList(wizard.getSourceInfo().getDBType()));
// make the selection available to other views
// getSite().setSelectionProvider(tableViewer);
}
public void update()
{
logger.debug("sourceDB=" + wizard.getSourceInfo().getDBType());
tableViewer.setInput(DataTypeFactory.getInstance().getCastList(wizard.getSourceInfo().getDBType()));
logger.debug("dataType = "+ wizard.getSourceInfo().getDBType());
tableViewer.refresh();
// tableViewer.getTable().selectAll();
}
}
答案 0 :(得分:1)
您必须更改输入的设计,以便它不仅使用字符串数组。对包含列数据的每一行使用一个类,并将get和set方法添加到该类中。
您可以更改传递给setInput
的数据以使用此类,也可以使用自定义内容提供商进行转换。