占用 Vaadin Gridlayout 中的可用空间,但考虑换行

2024-01-08

我使用 Vaadin 的 GridLayout 来可视化一些标题和值标签。 GridLayout 有 2 列和几行。标题标签位于左侧,其关联的值标签位于右侧。

我希望第一列消耗尽可能少的空间,第二列应该占据浏览器窗口的所有重新挖掘空间。如果值标签需要的空间多于可用空间,则它必须打破界限。

我试着玩setColumnExpandRatio()。如果我确定第二列的以下比率(并省略第一列的比率规范),那么一切都会按要求工作,除了具有非常大文本内容的值标签不会在行末尾中断这一事实。相反,会出现一个水平滚动条:

public class MyPanel extends GridLayout
{
   public MyPanel()
   {
       setWidth("100%");
       setMargin(true);
       setSpacing(true);

       buildView();
   }

   public void buildView()
   {
       removeAllComponents();
       setColumns(2);
       setColumnExpandRatio(1, 1);
       ...
       titleLabel.setWidth(null);
       valueLabel.setWidth(null);

       addComponent(titleLabel);
       addComponent(valueLabel);

       setComponentAlignment(titleLabel, Alignment.TOP_RIGHT);
   }
}

如果我还指定第一列的比率,则第一列消耗的空间比实际需要的空间多。

我怎样才能实现我的要求?


的内容Label仅在以下情况下换行Label有定义的宽度。想一想:如果宽度未定义,那么如何确定何时换行呢?这里的解决方案很简单,只需设置宽度valueLabel to "100%"。事实上,事情比这更简单。一个新鲜的Label默认情况下实例宽度为 100%,因此您只需删除将宽度设置为的行即可null.

这是一个例子UI类来测试它:

public class MyUI extends UI {

    @Override
    protected void init(VaadinRequest request) {

        GridLayout layout = new GridLayout();
        layout.setWidth("100%");
        layout.setColumns(2);
        layout.setColumnExpandRatio(1, 1);

        Label label1 = new Label("Lorem ipsum");
        Label label2 = new Label(
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
                        + "Morbi augue sapien, tempus ac mattis ut, iaculis a erat. "
                        + "Ut vitae ante metus. Pellentesque vitae rutrum lacus, id volutpat tellus. "
                        + "Duis eget ultricies metus. "
                        + "Vestibulum ac nibh eget velit pretium semper et eget est. "
                        + "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
                        + "Curabitur nec rutrum tellus. Curabitur vel urna a nunc cursus congue. "
                        + "Vestibulum pellentesque mi in leo luctus, sit amet auctor enim ornare. "
                        + "Proin in mauris convallis, vestibulum nisi sed, consectetur dolor. "
                        + "Vestibulum ultricies metus ut nulla gravida, eget dapibus turpis fringilla. "
                        + "Mauris hendrerit felis non aliquam elementum. "
                        + "Phasellus ut purus ut urna consequat commodo. "
                        + "Cras semper ac augue quis rutrum. "
                        + "Nunc tristique magna sit amet congue faucibus.");

        layout.addComponent(label1);
        layout.addComponent(label2);

        label1.setWidth(null);
        label2.setWidth("100%"); // I'm being explicit, but you can just as well leave this out if you like

        setContent(layout);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

占用 Vaadin Gridlayout 中的可用空间,但考虑换行 的相关文章

  • Android 布局 - 下面的列表视图和编辑文本

    我试图模仿 HTC SMS 应用程序 传统视图 的行为 其中显示所有消息 并在下面显示 EditText 正如您在屏幕截图中看到的 向上滚动时 EditText 从底部滚动 即使阅读了多篇文章 例如带有 ListView 和按钮的 Andr
  • Java - 如何使组件的垂直列居中?

    很简单 我想做的事 但我想不出办法 在 JFrame 或 JPanel 中 如何垂直居中组件 也就是说 类似于在 HTML 中使用 center 标签 组件位于一列中 并且全部居中 我尝试过使用 Y AXIS 和 PAGE AXIS 的 B
  • 使网格正确对齐

    在我的应用程序中 我在列表框中显示有关用户的一些信息 我已经得到了我想要的大部分东西 但布局有点困扰我 它由网格制成 因此可以重新调整大小并适合纵向 横向模式 However I cannot get the layout to fix i
  • 如何通过过滤计算 Vaadin 8 网格页脚中的总计

    我知道我必须使用grid getDataProvider 得到ListDataProvider 假设我发送了List to grid setItems 在其他计算页脚总数中我这样做 Collection myItems ListDataPr
  • Masonry 插件:调整 div 大小不会导致重新洗牌

    将 Masonry 项目包裹在 1000px 宽的 div 中 我有一个按钮可以使用 jQuery 将 div 大小调整为 2000xaddClass 问题是 Masonry 不会重新排列项目来填充额外的 1000px 空间 我知道调整大小
  • 如何使ListView的宽度适合其单元格的宽度

    我有一个带有自定义单元工厂的 ListView 我计算单元格的最大值 minWidth 并将其设置为整个 ListView 的 minWidth 因此 受布局中其他区域约束的 ListView 会精确地缩小到 minWidth 但它所容纳的
  • 无法在 NestedScrollView 内完全滚动

    不知何故 我无法在 NestedScrollView 内完全滚动 我的 NestedScrollView 内部是一个 TextView 其中有很多文本 下面有一个按钮 当我向下滚动时 我只能看到按钮的顶部 只有几个像素 它滚动得不够远 这是
  • UICollectionView - 水平滚动,水平布局?

    我有一个UIScrollView布置了一个图标网格 如果您能够想象 iOS Springboard 的布局 那么您的想法就非常接近正确了 它有一个水平的分页滚动条 就像 Springboard 一样 不过 布局似乎不太对劲 看起来好像是从上
  • 在 strings.xml 中存储十六进制颜色值

    我正在尝试存储hex colorstrings xml 中我的文本的值 因此所有布局文件都将引用该值 以便能够轻松快速更改项目的所有布局文本 但是我在引用它时遇到了麻烦 Using android textColor FFFFFF 在我的
  • CSS 列,从上到下然后从左到右

    我正在为应用程序构建报纸风格的布局 我的页面分为 8 列 各列应先垂直填充 然后水平填充 如果没有足够的内容来填充页面 则列仍应首先垂直填充 在页面右侧留下空白 目前 它们首先水平填充 在内容下方留下空白 我已经尝试过使用 CSS 列 但它
  • css 中的嵌套边框布局?

    我这个工作正常 http jsfiddle net uwcEw http jsfiddle net uwcEw CSS 上的传统边框布局 我想要做的是在边框布局的 中间 内有另一个 5 区域边框布局 重新应用上面相同的模式我得到这个 htt
  • 如何防止 HTML 文本孤儿?

    我经常在图像周围包裹文字 有时文字包裹起来很笨拙 如下所示 在 HTML 中 图像向左浮动 文本如下 p img src images image p p This is my David Copperfield em I was born
  • Android:焦点时改变样式

    我有这个自定义布局 LinearLayout FrameLayout ImageView TextView 此布局对点击事件做出反应 使用LinearLayout setOnClickListener 并使用可聚焦android focus
  • dojo中tabContainers的高度

    我正在使用 Dojo tabContainer 快速问题 你吗 have to如果您正在处理 Dojo 容器 请在 CSS 中指定小部件大小 以像素为单位 据我所知 让 TabContainer 实际显示的唯一方法是通过 CSS 为其指定绝
  • Python Tkinter OOP 布局配置

    我正在尝试使用 tkinter 构建一个应用程序 该布局在没有 OO 原则的情况下工作 但我很难理解应该如何将其转移到 OO The layout is as shown in the pic below 1280x720px 我有以下内容
  • 如何从传统的java web应用程序(带有web.xml)迁移到spring boot?

    我想将我的项目切换到基于弹簧的产品 我的第一步是将我的 java web 应用程序从生成的 WAR 文件转换为由 spring boot 提供支持的独立可执行 jar 让我们从 github 中获取一个开源 Web 应用程序示例 Vaadi
  • 设置 LinearLayout 的最大宽度

    如何设置水平线的最大宽度LinearLayout 因此 如果内容较短 例如某些文本 布局会缩小 如果内容较长 则布局不会扩展超过某个最大宽度值 我更喜欢在 XML 级别执行此操作 这就是我所需要的超出了之前答案中的建议 https stac
  • Vaadin 23 重新部署后无法完全重新加载应用程序

    现在 我正在准备 Vaadin 23 2 5 应用程序进行生产 并且经常在重新部署应用程序后无法完全重新加载自身 并在顶部挂有蓝色的进度条 我可能看到的唯一问题是浏览器控制台中的以下 JS 问题 FireFox Chrome 另外 根据我之
  • 底部页脚的 css 布局,动态 ajax 内容更改页面高度

    Update 实际上 我现在通过放弃固定页脚设计来解决这个问题 动态内容移动页脚并适当调整容器大小似乎没有问题 除非页脚最初固定在浏览器底部 我希望其他人最终能够提供一个兼具两全其美的出色解决方案 I spent all day tryin
  • 网格布局:创建 CSS,以便元素在调整相邻元素大小时保持位置

    我想在网格布局中构建一个简单的图像库 并且我正在使用类似的东西悬停时缩放 http www javascript fx com navigation imagezoom general help help html缩放悬停图像 但我宁愿使用

随机推荐