Gwt 我需要知道垂直面板何时改变大小

Gwt 我需要知道垂直面板何时改变大小,gwt,drag-and-drop,resize,rendering,Gwt,Drag And Drop,Resize,Rendering,我正在使用GWTDND在我的gwt程序中实现拖放功能。要使滚动正常工作,我需要 <ScrollPanel> <AbsolutePanel> <VerticalPanel> <!-- lots of draggable widgets --> </VerticalPanel> </AbsolutePanel> </ScrollPanel>

我正在使用GWTDND在我的gwt程序中实现拖放功能。要使滚动正常工作,我需要

<ScrollPanel>
    <AbsolutePanel>
        <VerticalPanel>
             <!-- lots of draggable widgets -->
        </VerticalPanel>
    </AbsolutePanel>
</ScrollPanel>

我必须手动将AbsolutePanel的大小设置为足以容纳VerticalPanel。但是,当我向VerticalPanel添加小部件时,VerticalPanel.getOffsetSight()报告的大小不会立即更新——我想它必须首先由浏览器呈现。所以我不能立即更新AbsolutePanel的大小,结果它太小了。啊


我的权宜之计是设置一个计时器,在500毫秒后调整面板大小。到那时,GetOffsetSight通常会返回更新的值。是否有任何方法可以立即预览尺寸更改或其他内容?或者,我可以立即强制渲染循环,以便在不设置计时器的情况下获得新的大小,而计时器必然容易出错?

这是DOM操作的常见问题。在添加组件后的短时间内,offsetHeight才会更新。我喜欢使用递归计时器来处理这个问题,直到违反了一个前提条件。例如,在您的情况下,有一个添加组件的函数,其定义如下:

public void addComponent(Widget w)
{
 final int verticalPanelHeight = verticalPanel.getOffsetHeight();
 verticalPanel.add(w);
 final Timer t = new Timer(){
  public void run()
  {
   if(verticalPanelHeight != verticalPanel.getOffsetHeight())
    absolutePanel.setHeight(verticalPanel.getOffsetHeight() + 10 + "px");
   else
    this.schedule(100);
  }
 };
 t.schedule(100);
}

什么时候检查新的面板高度?我想在添加新的小部件后立即检查。