我正在制作一个简单的甘特图小部件。它基本上只是一个具有自定义布局的复合材料。布局垂直排列所有子控件以占据父Composite的宽度的100%,如下所示:
以下是以这种方式排列子控件的代码:
public class GanttLayout extends Layout {
int defaultWidth = 200;
int width;
int itemHeight;
public GanttLayout(int x, int y) {
width = x;
itemHeight = y;
}
@Override
protected Point computeSize(Composite composite, int wHint, int hHint, boolean changed) {
int height = itemHeight * composite.getChildren().length;
Point size = new Point(width == SWT.DEFAULT? defaultWidth: width, height + 2);
return size;
}
@Override
protected void layout(Composite composite, boolean changed) {
int i = 0;
for(Control control : composite.getChildren()) {
control.setBounds(0, i * itemHeight, width == SWT.DEFAULT? composite.getSize().x: width, itemHeight);
i++;
}
}
}
问题在于,当添加数百个这些儿童控件时,它们需要很长时间才能显示出来,然后需要处理所有控件时需要很长时间。有没有办法让这个更有效率?也许有一种方法只有当用户滚动它们时才显示控件,有点像虚拟表?