GWT StackLayoutPanel:动态和自动高度
Posted
技术标签:
【中文标题】GWT StackLayoutPanel:动态和自动高度【英文标题】:GWT StackLayoutPanel: dynamic and automatic height 【发布时间】:2011-08-08 13:03:02 【问题描述】:我正在使用 StackLayoutPanel 显示对话的堆叠电子邮件,其中标题是发件人,子邮件是电子邮件的正文。对于这种动态性质,我只能在代码中估计堆栈的高度。为了估计身体的高度,我可以得到客户端窗口的宽度,然后大致猜测身体占据了多少行。但这很费力,而且很可能是错误的。
我的问题是:StackLayoutPanel 有没有办法,就像 GWT API 2.2 一样,知道并自动设置当前显示的子项(加上其标题和其他标题)的显示高度?
恐怕不是,所以我尝试了其他同样失败的方法。我试过了:
将 StackLayoutPanel 放入 ScrollPanel:
如果我不在代码中设置堆栈的大小,神秘地我只能看到第一个堆栈的标题,仅此而已,看不到它的主体,也看不到其他标题。 如果我设置它,那么我有身体高度估计的问题。不在 ScrollPanel 内: 堆栈会自动获取剩余窗口空间的大小,但是由于标题太多,这些标题会重叠并相互叠加。
此外,StackLayoutPanel 的默认行为似乎是在分配空间的最末端显示其余标题,而不仅仅是在之前的标题的孩子之后。有可能改变吗?
我们将不胜感激。
//我知道一个类似的问题是this,但我想我会扩展它。
【问题讨论】:
您是否尝试将设置高度设置为 100%? 是的,我尽我所能使用 css 属性,但什么也没有。 【参考方案1】:你是对的,你确实扩展了上一个问题,答案很简单:stackLayoutPanel.setHeight((40*numChildren + 200)+"px");
200px 的正文大小取决于内容,并且足以让 StackLayoutPanel 可能不会为您剪裁它。
我认为您将要使用 StackLayoutPanel 的壁橱是使用固定的主体宽度并在主体内部使用 ScrollPanel(而不是 SP 内部的 SLP)。这样所有电子邮件都可以在 ScrollPanel 中显示所有内容。
由于这有点妥协,因此另一种方法是只实现您自己的小部件。我可能会使用 VerticalPanel 作为底层小部件,并隐藏和显示 div(同时保持标题始终可见)
【讨论】:
是的,StackPanel 恐怕没有解决方案。似乎它主要用于静态堆栈,至少现在是这样。因为当我问这个时我需要快速的东西,所以我完全按照你说的做了,身体的卷轴。不是很好,但调整到适当的高度,大多数身体不需要滚动。【参考方案2】:也许可以使用自定义小部件来完成此操作,该小部件将包装一堆DisclosurePanel
s,以便一次只能显示其中一个。
【讨论】:
【参考方案3】:如果你扩展 StackLayoutPanel,并编写一个 resize() 方法,使用可见的小部件高度,加上面板标题高度的任意数字:
public void resize()
int panelHeight = super.getVisibleWidget().getOffsetHeight();
this.setHeight(panelHeight + 200 + "px");
然后在面板标题上添加一个单击处理程序,当单击时调用此方法,堆栈面板会动态调整大小以显示选定的面板。
【讨论】:
以上是关于GWT StackLayoutPanel:动态和自动高度的主要内容,如果未能解决你的问题,请参考以下文章
如何将现有的 eclipse GWT 项目转换为动态 Web 项目?