2009-01-29 43 views
3

我必須用很多控件構建一個相當大的窗體。控件分爲基本控件/設置和擴展控件/設置。用戶可以決定他是隻想看到基本的還是基本的和擴展的控件。佈局管理器可以產生多個JPanel嗎?

我已經將所有擴展控件放到它們自己的JPanel中,以便通過顯示或隱藏此面板來輕鬆切換兩個視圖。

目前我使用的GroupLayout,什麼情況是,在不同的面板上的控制沒有對齊:

Label aaa:  Text field 
Label a:  Text field 
Label aaaaaa: Text field 
---------------------------- 
Label b: Text field 
Label bbb: Text field 
Label bb: Text field 

不幸的是,我發現現在的方式來「同步」兩個面板的佈局(除了使用AbsoluteLayout和固定的控制座標)

  • 有沒有辦法實現這個?
  • 我的整個設計是否有缺陷?

編輯:如果有可能我想保留GroupLayout管理器。

回答

2

據我所知,沒有Swing LayoutManager(來自JRE或開源)可以跨越多個面板。

我目前正在爲我的DesignGridLayout項目開發這樣一個功能(我稱之爲「佈局同步」),但這不是一件容易實現的事情(我已經在2周前開始了,而且我仍然看不到如果和當我會得到一些有趣的東西,但我仍然有很高的期望;-))

你可以檢查的一個選項是將所有組件添加到同一個面板(然後只有一個GroupLayout),並隱藏/根據用戶的選擇顯示它們。希望GroupLayout能夠根據情況調整大小(在調用pack()之後)。

如果GroupLayout表現良好,那麼在用戶每次更改他的選擇以顯示/隱藏擴展字段後,都只需調用pack()即可。

否則,每次用戶更改其選擇時,您都必須手動設置面板的大小。

0

你可以使用網格佈局,而不是爲GroupLayout,這將給你列

1

也許最簡單的(好)的方式來做到這一點是所有的組件添加到主面板。將子面板設置爲非透明,並將其也添加到主面板。主面板需要優化繪圖才能關閉。另一種技術是添加間隔組件。在底部面板中添加與標籤相同列中的組件,這些標籤可以從頂部標籤中動態獲取各種尺寸方法的寬度分量。與頂部面板相反。

1

我認爲沒有辦法用標準佈局管理器來做到這一點。您可能必須編寫自己的佈局管理器,但如果您繼承GroupLayout,則不應太難。

0

如果你想保持他們在單獨的面板與獨立的佈局:

遍歷所有你添加的標籤,並找到每一個的最大首選寬度。 第二次迭代,並將首選尺寸設置爲每個標籤的首選高度,但最大寬度。