2013-08-16 42 views
0

我有一個JPanelGridBagLayout設置。它有2列和1行(2個單元格)。每個單元格包含一個JPanel,其中包含一個JLabel(組件的類型不重要)。GridBagLayout擴展列

左側單元格中的JLabel的寬度屬性設置爲100px。右側單元中的JLabel將width屬性設置爲50px。在這種情況下,左側的單元稍微延伸並且比右側的單元寬。

我認爲GridBagLayout只有當包含的組件佔用太多空間時才展開單元。 這是一個GBL錯誤嗎?

任何想法如何我可以解決這個問題?

回答

1

任何想法如何我可以解決這個問題?

Java Swing的工作方式與CSS/HTML不同。您在Swing中創建組件,並讓GUI擔心大小。

不知道你想要完成什麼,我所能做的就是定義Swing組件並讓GridBagLayout管理佈局。

如果您希望網格區域大小相同,您可以使用GridLayout。

+0

不幸的是,我需要跨越GridBagLayout允許的少數列或行的一些組件。對我來說最好的解決方案是讓GridBagLayout擁有所有單元格的大小,除了某些組件比它包含的單元大。 – pbartosz

1

恐怕這是一個難以回答的問題,因爲GridBagLayout沒有以這種方式排列它的列和行。如果您有兩列和兩個組件,那麼這些列將根據放入這些列的最大組件的大小自行調整大小。所以你的左欄更大,因爲你左邊的組件更大。

您可以通過調整組件的對應GridBagConstraints屬性來調整單元佔用多少空間。重量屬性(weighty & weightx)控制列(weightx)和行(weighty)佔用多少空閒空間。例如,如果您的JPanel s正在使用GridBagConstraints對象rightGbcleftGbc您可以使用以下代碼來更改它們的相對大小。

leftGbc.weightx = 0.5; 
rightGbc.weightx = 1; 

這意味着,右列將佔用兩倍的剩餘空間左柱,因此(希望)彌補您的組件的大小差異。

使用weight屬性可能會感覺像一個非常抽象的過程,並且可能需要一段時間才能習慣它們,但是一旦開始使用它們一段時間,您就會得到它。根據你正在使用的組件,還有其他的怪癖可以影響重量屬性對列/行的影響程度。