Swt/Jface tableViewer总结(三)

时间:2022-11-11 16:11:44
 

一.        创建表格

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();

    }

}

参考http://blog.csdn.net/basenet855x/article/details/6668198