在LayoutPanel首次创建和布局对象时,我无法获得对象的实际尺寸。我使用LayoutPanel按百分比调整小部件的大小:
MyClass displayObject = new MyClass();
add(displayObject);
setWidgetLeftWidth(displayObject, 0.0, Unit.PCT, 15.0, Unit.PCT);
setWidgetTopHeight(displayObject, 0.0, Unit.PCT, 30.0, Unit.PCT);
在类中我重写onResize():
public MyClass extends AbsolutePanel implements RequiresResize {
@Override
public void onResize() {
Integer maxWidth = getOffsetWidth();
Integer maxHeight = getOffsetHeight();
// ... need to use maxWidth here...
}
}
我的问题是除非浏览器在物理上调整大小,否则不调用onResize(),并且在首次显示对象时我需要正确的尺寸。
如果我调用forceLayout(),它会创建对onResize()的调用,但getOffsetWidth()会返回零。我需要强制调用onResize(),该对象在布局对象后执行。
答案 0 :(得分:0)
在询问尺寸之前,您应该给浏览器一点时间来完成布局:
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
Integer maxWidth = getOffsetWidth();
Integer maxHeight = getOffsetHeight();
// etc.
}
});
您可以在此处阅读更多内容:GWT: Timer and Scheduler Classes