摆动JComponents的布局管理器代表日历事件

时间:2015-08-18 14:12:59

标签: java swing calendar layout-manager

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

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:0)

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

我使用了以下方法:

代表一天的每个容器:

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

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

enter image description here