RCP TableViewer編程詳細

 

一.        創建表格

1.       setContentProvider 主要功能:把數據轉換爲表格需要的數據模型,這裏轉換爲數組。

2.       setLabelProvider 主要功能:設置每個單元格顯示的文本和圖片。

3.       setInput 主要功能:提供數據

 

整體上的工作過程是:setInput()提供數據,setContentProvider()把setInput()提供的數據轉換爲表格能用的數據類型:數組,setLabelProvider()把這些數據按照我們想要的形式顯示出來。他們三者遵照MVC思想。

 

二.       爲表格增加功能

1.    右鍵菜單

1.1    創建MenuManager()

1.2    設置爲表格的contextMenu

2.    排序

2.1 調用TableViewer方法setSorter(Sorter sorter)爲表格設置排序。

2.2 調用sorter.doSort(int column);觸發排序。

3.    編輯單元格內容

3.1    setColumnProperties 主要功能:給每個列設置一個屬性,相當於設置了一個名字

3.2    setCellEditors 主要功能:設置每列的單元格是什麼類型的編輯框,比如文本框,組合框,下拉框。

3.3    setCellModifier 主要功能:設置當前單元格是否可編輯,改變後的值怎麼處理等等。

4.    增加表格過濾

4.1 addFilter(ViewerFilter filter);

三. 其他

       1. 表格中增加一行記錄的方法:

TableViewer和數據模型(本例中的是List對象)中都能夠增加刪除一條記錄,區別在於TableViewer中的方法只是在對顯示界面的數據進行操作,併爲改變數據模型中的數據;而直接在數據模型中增刪數據需要調用TableViewer的refresh()方法才能顯示出增刪的數據。

       2.TableViewer的update()方法與refresh()方法的區別

前者假定輸入模型結構不變,後者認爲輸入模型結構發生變化;所以優先調用前者,減少系統開銷。

    3. TableColumn類:

它用來設置表格的title,它和表格的body是分開創建的,而且樹也可以創建樹的title,使用TreeColumn類,這時的樹就是 表格樹。

    4. 如何改變表格的行高:

可以通過設置單元格圖片的方式,間接的使單元格變高。

 

四.主要代碼示例

1. 主類

/**

 * @description:

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020

 */

public class MyEditor extends EditorPart {

 

    public static final String ID = "rcptest.editors.MyEditor";

    public static final String[] COLUMN_NAME = { "ID", "NAME", "SEX", "COLOR" };

    private TableViewer table;

    private List persons;

 

    public MyEditor() {

        super();

    }

 

    @Override

    public void doSave(IProgressMonitor monitor) {

        // TODO Auto-generated method stub

 

    }

 

    @Override

    public void doSaveAs() {

        // TODO Auto-generated method stub

 

    }

 

    @Override

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {

        // TODO Auto-generated method stub

        this.setSite(site);

        this.setInput(input);

        this.setPartName(input.getName());

 

    }

 

    @Override

    public boolean isDirty() {

        // TODO Auto-generated method stub

        return false;

    }

 

    @Override

    public boolean isSaveAsAllowed() {

        // TODO Auto-generated method stub

        return false;

    }

 

    //創建表格的代碼

    @Override

    public void createPartControl(Composite parent) {

        // TODO Auto-generated method stub

        persons = new ArrayList();

        persons.add(new PersonEO(1, "你好", "man", "black"));

        persons.add(new PersonEO(2, "wang", "man", "black"));

 

        table = new TableViewer(parent, SWT.FULL_SELECTION);

        for (int i = 0; i < 4; i++) {

            new TableColumn(table.getTable(), SWT.LEFT).setText("title" + i);

 

            table.getTable().getColumn(i).pack();

        }

        table.getTable().setHeaderVisible(true);

        table.getTable().setLinesVisible(true);

        table.setContentProvider(new MyContentProvider());

        table.setLabelProvider(new MyLabelProvider());

        table.setInput(persons);

 

        // add context menu

        this.createContextMenu();

 

        // enable table edit

        this.editor();

 

        // add sortor

        this.sorter();

    }

 

    private void sorter() {

        table.setSorter(new Sorter());

        TableColumn column = table.getTable().getColumn(0);

        column.addSelectionListener(new SelectionListener() {

 

            public void widgetDefaultSelected(SelectionEvent e) {

                // TODO Auto-generated method stub

 

            }

 

            public void widgetSelected(SelectionEvent e) {

                // TODO Auto-generated method stub

                ((Sorter) table.getSorter()).doSort(1);

                table.refresh();

            }

 

        });

    }

 

    private void editor() {

        table.setColumnProperties(COLUMN_NAME);

        CellEditor[] editors = new CellEditor[4];

        editors[0] = new TextCellEditor(table.getTable());

        editors[1] = new TextCellEditor(table.getTable());

        editors[2] = new TextCellEditor(table.getTable());

        editors[3] = new TextCellEditor(table.getTable());

 

        table.setCellEditors(editors);

        table.setCellModifier(new TableCellModifier());

    }

 

    private void createContextMenu() {

        MenuManager menu = new MenuManager();

        menu.add(new AddAction(table, persons));

        menu.add(new DelAction(table));

        menu.add(new RefreshAction(table));

        menu.add(new FileterAction(table));

        Menu m = menu.createContextMenu(table.getControl());

        table.getTable().setMenu(m);

 

    }

 

    @Override

    public void setFocus() {

        // TODO Auto-generated method stub

 

    }

 

    class MyContentProvider implements IStructuredContentProvider {

 

        public Object[] getElements(Object inputElement) {

            // TODO Auto-generated method stub

            return ((List) inputElement).toArray();

        }

 

        public void dispose() {

            // TODO Auto-generated method stub

 

        }

 

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

            // TODO Auto-generated method stub

 

        }

 

    }

 

    class MyLabelProvider implements ITableLabelProvider {

 

        public Image getColumnImage(Object element, int columnIndex) {

            // TODO Auto-generated method stub

 

            return null;

        }

 

        public String getColumnText(Object element, int columnIndex) {

            // TODO Auto-generated method stub

            PersonEO person = (PersonEO) element;

            if (columnIndex == 0)

                return person.getID() + "";

            if (columnIndex == 1)

                return person.getName();

            if (columnIndex == 2)

                return person.getGender();

            if (columnIndex == 3)

                return person.getColor();

 

            return null;

        }

 

        public void addListener(ILabelProviderListener listener) {

            // TODO Auto-generated method stub

 

        }

 

        public void dispose() {

            // TODO Auto-generated method stub

 

        }

 

        public boolean isLabelProperty(Object element, String property) {

            // TODO Auto-generated method stub

            return false;

        }

 

        public void removeListener(ILabelProviderListener listener) {

            // TODO Auto-generated method stub

 

        }

 

    }

}

 

2. 排序類

/**

 * @description:

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020

 */

public class Sorter extends ViewerSorter {

    private static final int ASC = 0;

    private static final int DES = 1;

    private int order;

    private int column;

 

    public void doSort(int column) {

        if (column == this.column)

            order = 1 - order;

        else {

            this.column = column;

            order = DES;

        }

 

    }

 

    @Override

    protected Comparator getComparator() {

        // TODO Auto-generated method stub

        return super.getComparator();

    }

 

    public int compare(Viewer viewer, Object e1, Object e2) {

        int result = 0;

        PersonEO p1 = (PersonEO) e1;

        PersonEO p2 = (PersonEO) e2;

        switch (column) {

        case 1:

            result = p1.getID() > p2.getID() ? 1 : -1;

            break;

        case 2:

            result = collator.compare(p1.getName(), p2.getName());

            break;

        case 3:

            result = collator.compare(p1.getGender(), p2.getGender());

            break;

        case 4:

            result = collator.compare(p1.getColor(), p2.getColor());

            break;

        }

 

        if (order == DES)

            result = -result;

 

        return result;

    }

}

 

3. CellModifier類

/**

 * @description: 編輯單元格內容

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020

 */

public class TableCellModifier implements ICellModifier{

 

    public boolean canModify(Object element, String property) {

        // TODO Auto-generated method stub

        return true;

    }

 

    public Object getValue(Object element, String property) {

        // TODO Auto-generated method stub

        return "...";

    }

 

    public void modify(Object element, String property, Object value) {

        // TODO Auto-generated method stub

       

    }

   

}

 

4. filter類

/**

 * @description:表格過濾

 * @author Administrator

 * @version 1.0, 2010-2-19

 * @Copyright 2010-2020

 */

public class FileterAction extends Action {

 

    ViewerFilter filter;

    TableViewer table;

 

    public FileterAction(TableViewer table){

        this.table = table;

        this.setText("filter");

        filter = new ViewerFilter(){

 

            @Override

            public boolean select(Viewer viewer, Object parentElement, Object element) {

                // TODO Auto-generated method stub

                PersonEO p = (PersonEO)element;

                return p.getGender().equals("women");

              

            }

 

        };

        this.setChecked(false);

    }

   

    public void run(){

        if(this.isChecked())

            table.addFilter(filter);

        else

            table.removeFilter(filter);

        table.refresh();

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章