5

我在我的 RCP 应用程序中使用 Nebula Grid 小部件。我在我的 Grid 中添加了一个 controlListener,每当调整 Grid Control 的大小时,它将调整每个 Grid 行高的大小。代码片段如下:

@Override
public void controlResized(ControlEvent e) {
    GridColumn []cols = grid.getColumns();
    for (GridItem item : grid.getItems()) {
        GC gc = new GC(item.getDisplay());

        int max = 0;
        Point tb=null;
        for(GridColumn col : cols){
            tb = col.getCellRenderer().computeSize(gc, col.getWidth(), SWT.DEFAULT, item);
            max = Math.max(max, tb.y);
            if(max > hmax){
                break;
            }
        }

        if(hmax==-1){

        }else if(max > hmax){
            max=hmax;
        }

        gc.dispose();
        item.setHeight(max);
    }
}

这工作正常,即每次用户调整任何列的大小时都会调整高度。但是每当网格行数很大时,比如几百到几千,调整大小就不顺畅。UI 有几秒钟没有响应。在进行一些分析后,我可以缩小对造成这种延迟的陈述的范围。也就是下面的语句:

tb = col.getCellRenderer().computeSize(gc, col.getWidth(), SWT.DEFAULT, item);

我能理解这其中的原因。为每一行和每一列调用上述语句,这似乎就是原因。对于 2000 行 5 列的 Grid,此语句被调用 10000 次。我怎样才能使这个过程高效?

4

0 回答 0