0

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

4

2 回答 2

0

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

于 2012-05-15T13:33:53.553 回答
0

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

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

        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++;
        }
    
于 2014-04-13T12:20:10.530 回答