Eclipse RCP表动态更新

时间:2012-05-15 12:09:31

标签: java eclipse rcp

我想在视图部分创建一个表,该表将动态更新(行数,列数,列名)。该模型是字符串数组的集合。我能这样做吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用TableViewer实例,指定其内容提供程序,然后,每次对其内容进行更改时,都可以调用其refresh()方法。

答案 1 :(得分:0)

@itun。动态显示列的最简单方法是创建所有列并将不必要列的宽度设置为零。 还有另一种方法(我正在使用)创建动态列如下。

  1. 为列创建扩展点(列名,方向,数据提供者)
  2. 使用步骤1创建扩展名。
  3. 在View中创建列的实现。

        String[] id = preferences.getString(PREFS_COLUMNS).split(";");
        for (int i = 0; i < id.length; i++) {
            String name = "";
            int style = SWT.LEFT;
            Image image = null;
            ILabelProvider provider = registry.createLabelProvider(id[i]);
            if (provider != null) {
                name = registry.getName(id[i]);
                style = registry.getOrientation(id[i]);
                if (provider instanceof ITableLabelProvider) {
                    name = ((ITableLabelProvider) provider).getColumnText(null, i);
                    image = ((ITableLabelProvider) provider).getColumnImage(null, i);
                }
            } else {
                LogFactory.getLog(getClass()).warn("Missing column [" + id[i] + "]");
            }
            if (index < table.getColumnCount()) {
                tableColumn = table.getColumn(index);
                if (tableColumn.getData("labelProvider") != null)
                    ((ILabelProvider) tableColumn.getData("labelProvider")).dispose();
            } else {
                tableColumn = new TableColumn(table, style);
                tableColumn.addControlListener(columnControlListener);
                tableColumn.addSelectionListener(columnSelectionListener);
                tableColumn.addDisposeListener(new DisposeListener() {
                    public void widgetDisposed(DisposeEvent e) {
                        if (e.widget.getData("labelProvider") != null)
                            ((ILabelProvider) e.widget.getData("labelProvider")).dispose();
                    }
                });
            }
            tableColumn.setText(name);
            tableColumn.setAlignment(style);
            tableColumn.setImage(image);
            tableColumn.setMoveable(true);
            tableColumn.setData("labelProvider", provider);
            tableColumn.setData("columnId", id[i]);
            index++;
        }