2015-08-18 44 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