2015-08-18 23 views
0

我工作的一个Java应用程序中,我需要布置代表日历事件JComponents,在容器摆JComponents:建议选择布局管理器为代表的日历事件

enter image description here

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

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

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

+2

也许MigLayout或GroupLayout可以做到这一点。或者做不到这一点,就像你在做一个定制的经理。 –

+0

谢谢,我读了几个其他人,并没有找到一个好的,可以使用或扩展来做我需要的东西。我会挖掘Mig anf集团。我想知道他们是否有选择只布置一个坐标轴(比如说y)。 – c0der

+0

GroupLayout非常灵活,但主要是由计算机/ IDE生成的,而不是非常友好的编码器。 MigLayout应该是灵活和强大的,但是是第三方布局。 –

回答

0

在探索过各种布局管理者之后,我很清楚需要完成的工作中最重要的部分是计算约束条件。基于该时间

  • 计算每个JComponent的Y位置(垂直)和高度(代表一个单日历事件):

    我使用了以下的方法:

    对于表示每天每个容器规模。

  • 为了计算每个JComponent的X位置和宽度,我不得不分析重叠的组件和找到其中“子柱”(或子栏小号)各应占有。
  • 迭代遍历所有容器的JComponents(按高度排序,表示持续时间),检查每个JComponents与其他所有JComponents重叠的时间。这样做,我可以计算出每个JComponent所需的子列数和适当的子列(X位置)。
  • 基于每个JComponent的X位置,我可以通过搜索下一个重叠的JComponent(如果有)来计算它的宽度。下一个重叠的JComponent的X位置限制了宽度。

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

enter image description here