我正在使用StackLayoutPanel来显示对话的堆叠电子邮件,其中标题是发件人,孩子是电子邮件的正文。对于动态特性,我只能估计代码中堆栈的高度。为了估计身体的高度,我可以得到客户的窗口宽度,然后大致猜测身体占据的线数。但这很费力,可能是错误的。
我的问题是:对于StackLayoutPanel,对于GWT API 2.2,有没有办法知道并自动设置当前显示的子节点(加上其标题和其他标题)的显示高度?
我恐怕没有,所以我尝试了其他的东西,然而,失败了。我试过了:
将StackLayoutPanel放在ScrollPanel中:
不在ScrollPanel内: 堆栈会自动获得剩余窗口空间的大小,但如果标题太多,则这些标题重叠并相互叠加。
此外,似乎StackLayoutPanel的默认行为是在分配的空间的最末端显示其余的标题,而不是在before的标题的子节点之后。有可能改变这个吗?
非常感谢您的帮助。
//我知道一个类似的问题是this,但我想我会扩展它。
答案 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");
}
然后在面板标题上添加单击处理程序,单击时调用此方法,堆栈面板动态调整大小以显示所选面板。