我有一个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/