2011-06-28 17 views
14

使用哪種方法來隱藏/刪除SWT表中的列(特別是在Eclipse插件中)?如何在SWT表中隱藏/刪除列

  1. 由於我需要插入和隱藏(或刪除)行和列,因此無法將此功能轉移到行。
  2. 我試圖用TableColumn.dispose()刪除它們,但根據佈局中的ColumnWeightData沒有刪除,並用新的TableLayout重置整個表格佈局並沒有從佈局中刪除有關列的信息。
  3. 我試着創建所有需要的列,並用setWidth(0)隱藏那些應該被隱藏/刪除的列。我編寫的示例代碼是here。這種方法並不好: 3.1。它不會縮放。在我的情況下,列的最大數量可能是幾千,而用戶只需要幾個。 3.2。處理大小調整真的是一個地獄。 AFAIU,即使在setResizable(false)列之後,如果父組件調整大小,也可能調整其大小。爲了處理它,我需要爲父組件編寫巨大的偵聽器。我還沒有嘗試。

所以我應該

  1. 進一步調查處置表列,並使用它?
  2. 堆棧與setWidth(0)一段時間,因爲我還沒有遇到過縮放問題呢?
  3. 查看一些第三方表格組件的方向(Nattable ...)? - 如果是,最好是開源的,因爲我的Eclipse插件是開源的。

回答

18

我們在許多餐桌上都這樣做。

首先,我們確保用戶沒有看到我們在做什麼。

table.setRedraw(false); 

然後我們刪除所有列。

while (table.getColumnCount() > 0) { 
    table.getColumns()[ 0 ].dispose(); 
} 

然後我們添加需要的。

ArrayList<Column> columns = getShownColumns(); 

for (Column column : columns) { 
    TableColumn tableColumn = new TableColumn(table, column.getStyle()); 
    tableColumn.setText(column.getTitle()); 
    tableColumn.setWidth(column.getWidth()); 
} 

最後我們讓用戶看看我們做了什麼。

table.setRedraw(true); 
+0

不確定是否正確評論已回答和已結束的問題。 **但是我應該怎麼處理佈局?**唯一對我有用的東西是TableLayout,其中包含嚴格的ColumnWeightData或ColumnPIxelData數,但是在刪除列之後 - 我無法添加任何內容。 –

+0

我不明白你的問題。你能更好地表達自己嗎? –

+0

對不起,我花了一個晚上谷歌搜索,發現有TableColumnLayout類。它對我來說工作得很好。實際上,我使用的其他技術的搜索功能更容易一些。 –

3

我會重新創建表列每次只有可見列。如果你使用SWT.VIRTUAL風格的位,這將會相當快。設置table.setRedraw(false),從你的表中刪除數據,處理所有TableColumns,重新創建需要的數據並重新設置你的數據。然後設置table.setRedraw(true)。這最大限度地減少了閃爍。

我做了所有這一切,它工作正常,TableColumns的處置按預期工作。儘管如此,使用SWT.VIRTUAL並不適合膽小的人。它牽涉到你的表的不同處理。你可以先嚐試一下,看看它是否足夠快。

擁有數千列的表格,只向用戶展示一些表格,聽起來很奇怪。與本地Table實現我期望與此有關的問題。