大多数布局管理器都有无参数构造函数(也就是说,您可以使用新的FlowLayout()创建FlowLayout,使用新的GridLayout()创建GridLayout,使用新的GridBagLayout()创建GridBagLayout等).但是,BoxLayout要求您传递它将要管理的容器以及应该布置组件的轴.
我的问题是:既然你已经告诉布局管理器要布局哪个组件,你为什么要写
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
而不只是第一行?
我快速查看了the BoxLayout source code并看到我使用的构造函数(第178-185行)没有调用target.setLayout(this)或任何类型的东西.看起来添加它真的很简单.有没有理由为什么它不包含在Swing库中?
如果重要,我正在使用
java version 1.7.0
Java(TM) SE Runtime Environment (build 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);
}
}