Java 如何仅当SWT视图在屏幕上滚动到时才加载它们?

Java 如何仅当SWT视图在屏幕上滚动到时才加载它们?,java,optimization,swt,Java,Optimization,Swt,我正在制作一个简单的甘特图小部件。它基本上只是一个具有自定义布局的组合。布局垂直排列所有子控件,以占据父组合的100%宽度,如下所示: 下面是以这种方式排列子控件的代码: public class GanttLayout extends Layout { int defaultWidth = 200; int width; int itemHeight; public GanttLayout(int x, int y) { width = x;

我正在制作一个简单的甘特图小部件。它基本上只是一个具有自定义布局的组合。布局垂直排列所有子控件,以占据父组合的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++;
        }
    }

}
问题是,当添加数百个这样的子控件时,它们需要很长时间才能显示,然后在需要处置时处置所有控件需要很长时间。有没有办法让这更有效?也许有一种方法可以只在用户滚动到控件时显示控件,有点像虚拟表


.

日食星云项目有一个beta版,它可以做你想做的事。还有Eclipse,我见过很多甘特图小部件,包括您链接的那个,但它们根本不符合我的要求。举个例子,和我需要的相比,这本书太复杂了,很难读懂。这是我决定创建自己的网站的唯一原因。