GWT复合动态高度调整大小

时间:2010-12-20 21:52:23

标签: gwt composite autoresize

我有一个GWT Composite,动态添加了一些其他复合材料。 我想make parent复合Resize自动适应其所有子窗口小部件的高度。 我尝试为Composite设置setHeight(“100%”),但这不起作用。 任何想法如何实现这个功能?

感谢。 编辑:

final DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Unit.EM);
    dockLayoutPanel.setStyleName("EntryPanel");
    dockLayoutPanel.setSize("142px", "72px");
    initWidget(dockLayoutPanel);

    final VerticalPanel panel = new VerticalPanel();
    panel.setSize("140px", "72px");

    chckbxExport = new CheckBox("Export");
    putField(CommonPresenter.CONSTANTS.EXPORT, chckbxExport);

    dateBox = new DateBox();

    dateBox.addValueChangeHandler(new ValueChangeHandler<Date>() {
        @Override
        public void onValueChange(final ValueChangeEvent<Date> event) {
            dateChanged = true;
        }
    });

    panel.add(dateBox);

    final ListBox visibility = new ListBox();

    final Label lblVisibility = new Label("Visibility:");
    LabeledWidget vis = new LabeledWidget(lblVisibility, visibility);

    for (int i = 0; i < CommonPresenter.CONSTANTS.VISIBILITIES.length; i++) {
        visibility.addItem(CommonPresenter.CONSTANTS.VISIBILITIES[i]);
    }

    putField(CommonPresenter.CONSTANTS.VISIBILITY, visibility);

    panel.add(vis);
    panel.add(chckbxExport);

    dockLayoutPanel.add(panel);

更新: 设置复合宽度以填充所有可用的窗口水平空间:

 final int scrollBarWidth = 25;
// editPanel.setHeight("180px");
setWidth(Window.getClientWidth() - scrollBarWidth + "px");
// editPanel.setStyleName("EditorPanel");

Window.addResizeHandler(new ResizeHandler()
{
  public void onResize(ResizeEvent event)
  {
    int width = event.getWidth();
    setWidth(width - scrollBarWidth + "px");
  }
});

3 个答案:

答案 0 :(得分:5)

以下是通常使用HTML + CSS的方法:

  • 创建父级,设置其高度(或将其设置为auto)。
  • 然后添加孩子(只需确保不要使用 absolute / fixed定位给孩子们。
  • 如果需要,设置孩子的身高。

然后会自动调整父级的高度。这与GWT Composites相同 - 只需确保哪些CSS(包括样式属性)适用于您的元素!如果不确定,请使用Firebug。

如果你需要更多细节,那么你必须发布一些代码来展示你如何构建父复合(UiBinder,......?)

答案 1 :(得分:0)

您可以通过Window#getClientHeight()获取实际高度,而不是使用“100%”。要处理用户调整浏览器大小的方案,可以使用ResizeHandler。

答案 2 :(得分:0)

尝试覆盖Resize()(您的类必须扩展到ResizeComposite)。 在这个重新大小的方法中设置你想要的大小。

这是动态的,因为每次重新调整窗口大小时,都会调用此方法并相应地设置值。