我有一个MyComposite类,我要在其中为“尺寸更改”设置动画。
为此,我正在循环更改大小。
每次循环后,我都呼叫layout()

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

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

MyComposite和动画:

//startnew 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:

最佳答案

重绘工作如下:


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


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

//layout of the composite doesn't work//composite.layout(true, true);//layout of parent workscomposite.getParent().layout(true, true);//marks the composite's screen are as invalidates, which will force acomposite.redraw(); redraw on next paint request//tells the application to do all outstanding paint requests immediatelycomposite.update();

关于java - Java Swt-调整动画大小。每次更改布局后如何重绘?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12124828/

10-11 22:34