【问题标题】:Layout manger for swing JComponents representing calendar events代表日历事件的 Swing 组件的布局管理器
【发布时间】:2015-08-18 14:12:58
【问题描述】:

我正在开发一个 java 应用程序,我需要在容器中布局表示日历事件的 JComponents:

我使用自定义布局管理器,但我怀疑是否是正确的解决方案。我根据事件开始和结束时间计算顶部 x 位置和高度。 我还计算每个事件的重叠事件数,从而计算出最大重叠数(表示最大列数)。

在计算每个组件的 y 位置和宽度时,由于许多重叠的可能性,它变得很复杂。

我的问题:是否有可用的布局管理器可以帮助我优化此类布局?还是我应该继续使用和改进自定义布局管理器?

【问题讨论】:

  • 或许 MigLayout 或 GroupLayout 可以做到这一点。或者失败了,你正在做一个自定义管理器。
  • 谢谢,我阅读了其他一些内容,但没有找到可以用来或扩展来做我需要的好东西。我将深入研究 Mig anf Group。我想知道他们是否可以选择仅布局一个轴(比如 y)。
  • GroupLayout 非常灵活,但主要编写为由计算机/IDE 生成,对编码器不太友好。 MigLayout 应该是灵活而强大的,但它是第 3 方布局。

标签: java swing calendar layout-manager


【解决方案1】:

在探索了各种布局管理器之后,我很清楚需要完成的工作中最重要的部分是计算约束。

我使用了以下方法:

对于代表一天的每个容器:

  • 根据时间尺度计算每个 JComponent 的 Y 位置(垂直)和高度(代表单个日历事件)。
  • 为了计算每个 JComponent 的 X 位置和宽度,我必须分析重叠的组件并找出每个应该占据的“子列”(或子列s)。
  • 遍历所有容器的 JComponents(按高度排序,表示持续时间),检查每个容器的时间重叠 JComponents。这样做我能够计算出所需子列的数量,以及每个 JComponent 的适当子列(X 位置)。
  • 基于每个 JComponent 的 X 位置,我能够通过搜索下一个重叠的 JComponent(如果有)来计算其宽度。下一个重叠 JComponent 的 X 位置限制了宽度。

在获得所有需要的约束之后,我可以使用简单的布局管理器(如 Formlayout),但我没有看到这样做的价值。为每个 JComponent 设置界限是直截了当的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2015-10-20
    • 2013-12-17
    • 2011-09-14
    • 2011-06-11
    相关资源
    最近更新 更多