如何在tableviewer中获得正确的价值?

时间:2014-01-23 12:35:17

标签: java jface tableviewer

我创建了tableviewer(jface)。

所有列都可编辑(使用EditingSupport)

我想保存表格中的更改。

我添加了一个保存按钮。

我试过的问题是改变单元格中的值(焦点仍然在单元格上)我按保存并且我想读取更改的值。我总是看到旧值而不是新值的问题

如果我更改了单元格的焦点,那么它正在工作。

我是否需要在单元格中添加用于编辑的事件?

这是我的代码

//保存按钮的逻辑

      saveButton.addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent e) {


                     TableItem item = this.getTable().getItem(selectionIndex);

// gridViewer类

   public class MyGridViewer extends TableViewer {
     public MyGridViewer (Composite parent) {
    super(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);

    final Table table = this.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    this.setContentProvider(new MyModelProvider());

}
      }

 @Override
protected void inputChanged(Object input, Object oldInput) {

    removeColumn();



        tableCol = new TableViewerColumn(this, SWT.NONE);
        column = tableCol.getColumn();
        column.setText(dataColumnHeader.getName());
        column.setWidth(100);
        column.setResizable(true);
        column.setMoveable(true);
        tableCol.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                DataRow r = (DataRow) element;
                DataCell c = r.getDataCellByName(dataColumnHeader.getName());
                if (c != null && c.getValue() != null) {
                    return c.getValue().toString();
                }
                return null;
            }
        });


    editingSupport = new StringCellEditingSupport(this, dataColumnHeader);
tableCol.setEditingSupport(editingSupport);
    super.inputChanged(input, oldInput);

}

//编辑单元格类

   public class StringCellEditingSupport extends EditingSupport {
private final TableViewer tableViewer;
private final DataColumnHeader column;
private final StringCellEditor cellEditor;

   public StringCellEditingSupport(TableViewer viewer, DataColumnHeader dataColumnHeader) {
    super(viewer);
    this.tableViewer = viewer;
    this.cellEditor = new StringCellEditor(tableViewer.getTable(), SWT.BORDER);

        this.column =   dataColumnHeader;


}

@Override
protected StringCellEditor getCellEditor(Object element) {
    return cellEditor;
}

@Override
protected boolean canEdit(Object element) {
    return true;
}

@Override
protected Object getValue(Object element) {
    if(element instanceof DataRow) {
        DataRow dataRow = (DataRow) element;
        DataCell cell = dataRow.getDataCellByName(this.column.getName());
        return cell.getValue();
    }
    return null;
}

@Override
protected void setValue(Object element, Object value) {
    if (element instanceof DataRow && value instanceof String) {
        DataRow dataRow = (DataRow) element;
        DataCell cell = dataRow.getDataCellByName(this.column.getName());
        cell.setValue(value);
        tableViewer.update(element, null);
    }
}

}

0 个答案:

没有答案