2012-04-14 17 views
1

我試圖通過正確使用不同的LayoutManagers來讓我的GUI設計技能更加高效和有效,通過深入瞭解引擎蓋下發生的事情。我正在查看BorderLayout的源代碼,並在下面的代碼片段中從layoutContainer()方法中獲取,我注意到對子組件的setSize()方法以及setBounds()方法的調用。查看Component的這些方法的源代碼,setSize()實際上使用Component.x和Component.y的當前值調用setBounds()。爲什麼這樣做(而不是完全減少)? setBounds()調用不會完全覆蓋setSize()調用的結果嗎?Java:爲什麼BorderLayout調用setSize()後跟setBounds()?

if ((c=getChild(NORTH,ltr)) != null) { 
    c.setSize(right - left, c.height); 
    Dimension d = c.getPreferredSize(); 
    c.setBounds(left, top, right - left, d.height); 
    top += d.height + vgap; 
} 

謝謝。

回答

1

某些組件在計算其首選大小時會考慮其當前大小。所以,例如,一個文本區域不知道它想要達到多高,直到它知道它有多寬。那麼它可以計算出它的文本換行並找出它需要的行數。

所以在這裏,撥打setSize()確實只是指定寬度。然後,佈局管理器獲取並設置寬度爲的首選高度爲的高度。

+0

令人驚歎!這很有道理。我需要很長時間才能完全理解「普通」界面下發生的所有細節。謝謝。 – ags 2012-04-14 21:17:55

相關問題