如何使用UiBinder获得GWT中的小部件高度

如何使用UiBinder获得GWT中的小部件高度,gwt,uibinder,Gwt,Uibinder,我无法获取代码中小部件的高度 docklayoutpanel.setHeight(“1900px”); 字符串高度=整数.toString(docklayoutpanel.getOffsetSight()); 字符串高度t=高度+px; 系统输出打印LN(高度); 但o/p始终为0px。这取决于您在何处调用此代码。装载后高度将可用,即您可以通过onLoad()方法获得高度这个问题很老,但我也遇到了同样的问题,我花了很长时间才解决。因此,在这里帮助别人是我的解决办法。 我正在使用UIBinder

我无法获取代码中小部件的高度

docklayoutpanel.setHeight(“1900px”);
字符串高度=整数.toString(docklayoutpanel.getOffsetSight());
字符串高度t=高度+px;
系统输出打印LN(高度);

但o/p始终为0px。

这取决于您在何处调用此代码。装载后高度将可用,即您可以通过
onLoad()
方法获得高度这个问题很老,但我也遇到了同样的问题,我花了很长时间才解决。因此,在这里帮助别人是我的解决办法。 我正在使用UIBinder构建我的视图,并在构造函数中添加了一个调度器

public class MyWidgetImpl extends Composite implements MyWidget {

@UiTemplate("MyWidget.ui.xml")
interface MainViewUiBinder extends UiBinder<Widget, MyWidgetImpl> {
}

@UiField(provided = true)
InputPanel inputPanel;

@UiField(provided = true)
ResultPanel resultPanel;

public MyWidgetImpl() {
    inputPanel = ClientFactory.getInputPanel();
    resultPanel = ClientFactory.getResultPanel();

    MainViewUiBinder uiBinder = GWT.create(MainViewUiBinder.class);
    initWidget(uiBinder.createAndBindUi(this));

    Window.addResizeHandler(new ResizeHandler() {
        public void onResize(ResizeEvent event) {
            resize();
        }
    });


    Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
        public void execute() {
            resize();
        }
    });
}

private void resize() {
    if(Window.getClientHeight() > resultPanel.getCellTree().getAbsoluteTop())
        resultPanel.getScrollPanel().setHeight((Window.getClientHeight() - resultPanel.getCellTree().getAbsoluteTop()) + "px");
}
公共类MyWidgetImpl扩展复合实现MyWidget{
@UiTemplate(“MyWidget.ui.xml”)
接口MainViewUiBinder扩展了UiBinder{
}
@UiField(提供的=真)
输入面板输入面板;
@UiField(提供的=真)
ResultPanel ResultPanel;
公共MyWidgetImpl(){
inputPanel=ClientFactory.getInputPanel();
resultPanel=ClientFactory.getResultPanel();
MainViewUiBinder=GWT.create(MainViewUiBinder.class);
initWidget(uiBinder.createAndBindUi(this));
addResizeHandler(新的ResizeHandler(){
public void onResize(ResizeEvent事件){
调整大小();
}
});
Scheduler.get().ScheduledDeferred(新的Scheduler.ScheduledCommand()){
public void execute(){
调整大小();
}
});
}
私有void resize(){
if(Window.getClientHeight()>resultPanel.getCellTree().getAbsoluteTop())
resultPanel.getScrollPanel().setHeight((Window.getClientHeight()-resultPanel.getCellTree().getAbsoluteTop())+“px”);
}

}

它正在由onmoduleload()方法调用的Uibinder.java类中使用。如果您能指定代码的确切方法/位置,则信息不足,无法给出建议。顺便说一句,如果您正在谈论UiBinder接口,那么它有一个定义为createAndBindUi的方法,用于用代码绑定xml表示。或者你以另一种方式使用它?我的代码在Uibinder类的构造函数中。。。。。EntryPoint Classit的根面板调用它似乎不是这个代码的正确位置,正如我所说的,最好是将它放在复合小部件(使用这个UiBinder构建)的onLoad()方法中,一旦元素附加到页面上(那么它就有大小)能否在docklayoutpanel的构造函数调用的位置添加代码?太长,无法上载…:(我在考虑小部件)docklayoutpanel包含。可能有你的问题的答案。我刚刚在一个滚动面板上添加了docklayoutpanel,它的中心流面板具有动态大小,我必须将中心流面板的高度设置为docklayoutpanel,在这里,当我试图获取流面板的高度时,它返回0 o仅…可能dockLayoutPanel的高度是0px,因为它不包含任何小部件。它有任何小部件吗?