用于表示日历事件的swing JComponents的布局管理器

问题描述 投票:0回答:1

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

enter image description here

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

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

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

java swing calendar layout-manager
1个回答
0
投票

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

我使用了以下方法:

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

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

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.