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】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于GWT StackLayoutPanel:动态和自动高度的主要内容,如果未能解决你的问题,请参考以下文章

生成动态文件并在 GWT 中下载

如何将现有的 eclipse GWT 项目转换为动态 Web 项目?

包含要添加动态列的复选框的 GWT EXT 网格?

使用动态组件和自定义事件时的 VueJS 警告

如何在具有分离服务器的环境中使用 GWT RPC:静态内容服务器和动态内容服务器

springboot多数据源动态切换和自定义mybatis件分页插