大多數佈局管理器沒有參數構造函數(也就是說,您可以創建一個帶有new FlowLayout()
的FlowLayout,帶有new GridLayout()
的GridLayout,帶有new GridBagLayout()
的GridBagLayout等)。但是,BoxLayout
要求您傳遞將要管理的容器和組件佈置的軸。爲什麼你需要用BoxLayout調用setLayout?
我的問題是:既然你已經告訴佈局管理器哪個組件來鋪陳,爲什麼你需要寫
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
,而不是僅僅在第一線?
我快速瀏覽了一下the BoxLayout
source code,看到我使用的構造函數(第178-185行)沒有調用target.setLayout(this)
或任何類型的東西。看起來似乎只是增加這一點非常簡單。是否有一個原因,它沒有包含在Swing庫中?
如果它的事項,我使用
Java版本1.7.0
的Java(TM)SE運行時環境(建立1.7.0-B147)
上Win7Pro 。
謝謝!
SSCCE:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class BoxLayoutSSCCE extends JFrame {
// Change this to see what I mean
public static final boolean CALL_SET_LAYOUT = true;
public BoxLayoutSSCCE() {
super("Box Layout SSCCE");
JPanel panel = new JPanel();
BoxLayout bl = new BoxLayout(panel, BoxLayout.Y_AXIS);
if (CALL_SET_LAYOUT) {
panel.setLayout(bl);
}
panel.add(new JButton("Button 1"));
panel.add(new JButton("Button 2"));
}
public static void main (String[] args) {
BoxLayoutSSCCE blsscce = new BoxLayoutSSCCE();
blsscce.pack();
blsscce.setVisible(true);
}
}
1爲[SSCCE](http://sscce.org/) – trashgod