繁体   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