Java Swt-调整动画大小。每次更改布局后如何重画?

Ski*_*kip 2 java swt

我有一MyComposite堂课,我想为“尺寸变化”设置动画。
为此,我正在循环更改大小。
每次打loop之后,我都会打电话给layout()

不幸的是,Composite每次迭代后都不会重新绘制,而是直接跳到我Composite的最终大小。

如何在每次更改尺寸时强制窗口小部件重新绘制?

MyComposite和动画



//start
new Animation().start(myComposite);

...

public MyComposite(Composite parent, int style, int bgcolor) {
        super(parent, style);
        this.setBackground(getDisplay().getSystemColor(bgcolor));       
    }

    @Override
    public Point computeSize(int wHint, int hHint, boolean changed) {
        return super.computeSize(width, height, changed);
    }


    class Animation{
        public void start(MyComposite composite){
            for(int i=0; i<1000; i++){
                composite.width++;
                composite.getParent().layout(true, true);
            }
        }
    }


MyComposite

Ski*_*kip 5

重绘工作如下:

  • layout()标记强制重新定位所有复合子级。这将在下一次重新绘制时变得可见,这将在将来重新绘制复合材料的屏幕区域时在某个位置完成
  • redraw()将小部件标记为无效。在下一次重绘系统操作时,将对该区域进行重绘。
  • update()强制所有未完成的redraw()请求立即完成。

所以问题是,我没有立即触发重新绘制请求。正确的动画功能如下所示:


//layout of the composite doesn't work
//composite.layout(true, true);

//layout of parent works
composite.getParent().layout(true, true);

//marks the composite's screen are as invalidates, which will force a 
composite.redraw(); redraw on next paint request 

//tells the application to do all outstanding paint requests immediately
composite.update();