TableViewer未在RAP中刷新

时间:2015-03-25 13:24:55

标签: swt eclipse-rcp jface eclipse-rap

我尝试运行Eclipse RCP代码以在Eclipse RAP环境中运行。在我的Eclipse RCP代码中,有一些功能可以将行添加到表中。但  添加代码在Eclipse RAP中不起作用。我正在使用TableViewer。 以下是我的代码。

public class BasicEntryPoint extends AbstractEntryPoint {

    private static final int COLUMNS = 2;
    private TableViewer viewer;

    private class ViewContentProvider implements IStructuredContentProvider {
        public Object[] getElements(Object inputElement) {
            List<Person> list = (List<Person>) inputElement;
            return list.toArray();
        }

        public void dispose() {
        }

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

    private class ViewLabelProvider extends LabelProvider implements
            ITableLabelProvider {
        public Image getColumnImage(Object element, int columnIndex) {
            return null;
        }

        public String getColumnText(Object element, int columnIndex) {
            Person p = (Person) element;

            if (columnIndex == 0) {
                return p.getName();
            }

            return p.getPlace();
        }
    }

    private class Person{
        String name;
        String place;

        public void setName(String name) {
            this.name = name;
        }

        public void setPlace(String place) {
            this.place = place;
        }

        public String getName() {
            return name;
        }

        public String getPlace() {
            return place;
        }
    }

    public List<Person> persons() {

        List<Person> list = new ArrayList<Person>();

        Person person = new Person();
        person.setName("bb");
        person.setPlace("jjj");

        list.add(person);

        person = new Person();
        person.setName("sss");
        person.setPlace("fff");
        list.add(person);

        return list;

    }

    @Override
    protected void createContents(Composite parent) {
        parent.setLayout(new GridLayout(2, false));

        viewer = new TableViewer(parent, SWT.NONE);
        viewer.setContentProvider(new ViewContentProvider());
        viewer.setLabelProvider(new ViewLabelProvider());
        final Table table = viewer.getTable();
        viewer.setColumnProperties(initColumnProperties(table));
        viewer.setInput(persons());
        viewer.getTable().setHeaderVisible(true);

        Button checkbox = new Button(parent, SWT.CHECK);
        checkbox.setText("Hello");
        Button button = new Button(parent, SWT.PUSH);
        button.setText("World");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                System.out.println("Button clicked");
                Person p = new Person();
                p.setName("Dee");
                p.setPlace("TCR");
                persons().add(p);
                String prop[] ={"name","place"};
                viewer.update(p, prop);
                //viewer.refresh();
            }
        });
    }

    private String[] initColumnProperties(Table table) {
        String[] result = new String[COLUMNS];
        for (int i = 0; i < COLUMNS; i++) {
            TableColumn tableColumn = new TableColumn(table, SWT.NONE);
            result[i] = "Column" + i;
            tableColumn.setText(result[i]);
            if (i == 2) {
                tableColumn.setWidth(190);
            } else {
                tableColumn.setWidth(70);
            }
        }
        return result;
    }

}

1 个答案:

答案 0 :(得分:1)

您应该使用:

viewer.add(p);

而不是update向表格添加新项目(包括SWT和RAP)。

您还必须更新模型以包含新项目。