GWT StackLayoutPanel:动态和自动高度

时间:2011-04-19 09:51:16

标签: java gwt scroll stack height

我正在使用StackLayoutPanel来显示对话的堆叠电子邮件,其中标题是发件人,孩子是电子邮件的正文。对于动态特性,我只能估计代码中堆栈的高度。为了估计身体的高度,我可以得到客户的窗口宽度,然后大致猜测身体占据的线数。但这很费力,可能是错误的。

我的问题是:对于StackLayoutPanel,对于GWT API 2.2,有没有办法知道并自动设置当前显示的子节点(加上其标题和其他标题)的显示高度?

我恐怕没有,所以我尝试了其他的东西,然而,失败了。我试过了:

  1. 将StackLayoutPanel放在ScrollPanel中:

    • 如果我没有在代码中设置堆栈的大小,神秘地我只能看到第一个堆栈的标题,而不仅仅是它的主体,还有其他标题。
    • 如果我确实设置了它,那么我就会有身体高度估计的问题。
  2. 不在ScrollPanel内: 堆栈会自动获得剩余窗口空间的大小,但如果标题太多,则这些标题重叠并相互叠加。

  3. 此外,似乎StackLayoutPanel的默认行为是在分配的空间的最末端显示其余的标题,而不是在before的标题的子节点之后。有可能改变这个吗?

    非常感谢您的帮助。

    //我知道一个类似的问题是this,但我想我会扩展它。

3 个答案:

答案 0 :(得分:2)

你是对的,你确实扩展了上一个答案很简单的问题:stackLayoutPanel.setHeight((40 * numChildren + 200)+“px”);

200px的主体大小取决于内容,足以让StackLayoutPanel可能不会为你剪掉它。

我认为StackLayoutPanel附带的壁橱是使用固定的主体宽度并在主体内使用ScrollPanel INSIDE(而不是SP内的SLP)。这样,所有电子邮件都可以显示ScrollPanel中的所有内容。

由于这是一个妥协,另一种方法是只实现自己的小部件。我可能会使用VerticalPanel作为底层小部件,只是隐藏和显示div(同时始终保持标题可见)

答案 1 :(得分:2)

也许可以使用自定义小部件来完成此操作,该小部件将包装一堆DisclosurePanel,以便一次只能显示其中一个。

答案 2 :(得分:1)

如果扩展StackLayoutPanel,并使用可见的窗口小部件高度编写resize()方法,加上面板标题高度的任意数字:

public void resize() {
    int panelHeight = super.getVisibleWidget().getOffsetHeight();
    this.setHeight(panelHeight + 200 + "px");
}

然后在面板标题上添加单击处理程序,单击时调用此方法,堆栈面板动态调整大小以显示所选面板。