LayoutPanel getOffsetWidth()返回0

时间:2014-08-01 03:43:42

标签: java gwt

在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(),该对象在布局对象后执行。

1 个答案:

答案 0 :(得分:0)

在询问尺寸之前,您应该给浏览器一点时间来完成布局:

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        Integer maxWidth = getOffsetWidth();
        Integer maxHeight = getOffsetHeight(); 
        // etc.
    }
});

您可以在此处阅读更多内容:GWT: Timer and Scheduler Classes