2012-05-15 93 views
0

我想在視圖部分製作一個表,它將被動態更新(行數,列數,列名)。該模型是字符串數組的集合。我可以這樣做嗎?Eclipse RCP表動態更新

+0

你當然可以。 –

回答

0

最簡單的方法是使用TableViewer實例,指定其內容提供者,然後每次對其內容進行更改時都可以調用其refresh()方法。

+0

你能給我一段代碼嗎?因爲很難找到有用的東西。我已閱讀關於TableViewer。你仍然可以通過一個簡單的例子來疏忽我的任務。 Thx提前。 – itun

+0

看看這個教程:http://www.vogella.com/articles/EclipseJFaceTable/article.html – kyiu

+0

我看到了這個,但它沒有解釋一件事。我如何更改列名和號碼? – itun

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++; 
        }