【问题标题】:How to get widget height in GWT using UiBinder如何使用 UiBinder 在 GWT 中获取小部件高度
【发布时间】:2013-02-14 10:44:33
【问题描述】:

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

docklayoutpanel.setHeight("1900px");
String height=Integer.toString(docklayoutpanel.getOffsetHeight());
String heightt=height+"px";
System.out.println(heightt);

但是o/p总是0px。

【问题讨论】:

  • 能否在docklayoutpanel的构造函数调用处添加代码?
  • 上传时间过长... :(
  • 我正在考虑 docklayoutpanel 包含的小部件。也许你的问题有答案。
  • 我刚刚使用了一个滚动面板,我在其上添加了 dockLayoutPanel,其中心流面板具有动态大小,我必须将中心流面板的高度设置为 docklayoutpanel,并且在我尝试获取时仅返回零 0 的流程面板的高度...
  • 也许dockLayoutPanel的高度是0px,因为它不包含任何小部件。有吗?

标签: gwt uibinder


【解决方案1】:

这个问题很老,但我遇到了同样的问题,我花了很长时间才解决它。所以在这里帮助别人是我的解决方案。 我正在使用 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");
}

}

【讨论】:

    【解决方案2】:

    这取决于您在哪里调用此代码。加载后高度将可用,即您可以在onLoad() 方法中获得高度

    【讨论】:

    • 它在由 onmoduleload() 方法调用的 Uibinder.java 类中使用
    • 您能否指定您拥有此代码的确切方法/位置,提供建议的信息不足。顺便说一句,如果您在谈论 UiBinder 接口,它有一个定义的 createAndBindUi 方法,用于将 xml 表示与代码绑定。或者你以其他方式使用它?
    • 我的代码在 Uibinder 类的构造函数中.....它被 EntryPoint 类的根面板调用
    • 这似乎不是这个代码的正确位置,正如我所说,最好将它放在复合小部件(使用此 UiBinder 构建)的 onLoad() 方法中,一旦元素附加到页面(然后它有大小)
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2012-08-04
    • 2016-05-14
    • 2011-06-12
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多