RCP學習:SWT TableViewer 單元格編輯


創建一個SWT的Table,可以通過自己控制Table、TableColumn以及TableItem來實現

這里不詳述,更好的方式則是使用jface的TableViewer來實現MVC表格。

 

首先我們要准備Model,如:

View Code
public class BTDColumn {
    public final static String KEY_NAME = "Name";
    public final static String KEY_DESC = "Desc";
    public final static String KEY_TYPE = "Type";
    public final static String KEY_NULLABLE = "Nullable";
    public final static String KEY_DEFAULTVALUE = "DefaultValue";
    public final static String KEY_UUID = "UUID";

    public final static String[] KEYS = new String[] { KEY_NAME, KEY_UUID,
            KEY_TYPE, KEY_DESC, KEY_NULLABLE, KEY_DEFAULTVALUE };
    private Map<String, Object> map = new HashMap<String, Object>();

    public void setValue(String key, Object value) {
        map.put(key, value);
    }

    public Object getValue(String key) {
        return map.get(key);
    }

    public void dispose() {
        map.clear();
    }
}

新建一個TableViewer,為它設置列名和列寬,如下:

TableViewerColumn valueColumn = new TableViewerColumn(TableViewer,
                SWT.CENTER);
        valueColumn.getColumn().setText(name);
        valueColumn.getColumn().setWidth(size);

 

然后為我們的TableViewer提供LabelProvider,ContentProvider和Sorter。

TableViewer在設置input之后,首先調用的是ContentProvider的getElements方法,來獲取model列表。

所以我們需要重寫該方法以提供model列表。

接着,重寫LabelProvider#getColumnText(Object element, int columnIndex)方法來對列表里的每一個model分別解析,以把數據應用到每一列。

至於Sorter則是決定了排序規則。

 

這些做完之后,我們再來為這個表格提供單元格編輯器。

在絕大多數的情況下,同一列的單元格編輯器都是相同的。

所以可以想見,單元格編輯器是和TableViewerColumn相關的,代碼如下:

        EditingSupport support = new ColumnEditingSupport(
                valueColumn.getViewer(), type);
        valueColumn.setEditingSupport(support);

這樣我們就為valueColumn.getViewer()這一列提供了一個ColumnEditingSupport編輯支持。

 

在這個ColumnEditingSupport里我們再定義具體的單元格編輯器

ColumnEditingSupport#getCellEditor(Object element),本方法在點擊單元格的時候觸發,element是所點擊的單元格所屬行的model。

其返回值必須是org.eclipse.jface.viewers.CellEditor的子類

ColumnEditingSupport#canEdit(Object element) ,本方法決定單擊單元格事件發生后是否彈出編輯器

ColumnEditingSupport#getValue(Object element),該方法決定了單元格編輯器在初始化的時候,獲得的值,在大部分的情況下,它的值是要和當前單元格展示的字符串一致的。

ColumnEditingSupport#setValue(Object element, Object value),該方法是用於單元格編輯器在失去焦點后,將設置后的值返回給單元格。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM