簡體   English   中英

如何在SWT表中隱藏/刪除列

[英]How to hide/delete column in SWT table

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

  1. A無法將此功能傳輸到行,因為我需要插入和隱藏(或刪除)行和列。
  2. 我試圖用TableColumn.dispose()刪除它們,但是根據布局中的ColumnWeightData沒有被刪除,並且使用新的TableLayout重置整個表格布局沒有從布局中刪除有關列的信息。
  3. 我嘗試創建所有需要的列,並使用setWidth(0)隱藏應隱藏/刪除的列。 我寫的示例代碼在這里 這種方法並不好:3.1。 它不會擴展。 在我的情況下,列的最大數量可能是幾千,用戶實際上只需要很少。 3.2。 處理大小調整真的是一個地獄。 即使在setResizable(false)列之后,如果調整父組件的大小,也可以調整AFAIU的大小。 為了解決這個問題,我需要為父組件編寫大量的監聽器。 我還沒試過。

我也應該這樣

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

我們在這里的許多表格上都是這樣做的。

首先,我們確保用戶不會看到我們正在做的事情。

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 );

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

我做了所有這些,它工作正常,TableColumns的處理按預期工作。

但是,使用SWT.VIRTUAL不適合膽小的人。 它暗示了對表的不同處理。 你可以先試試,看看它是否足夠快。

擁有一個包含數千列的表格,只向用戶顯示一些內容對我來說非常奇怪。 使用本機Table實現,我預計會遇到問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM