大多数布局管理器都有无参数构造函数(也就是说,您可以创建一个带有 的 FlowLayout new FlowLayout ()
、一个带有 的 GridLayout new GridLayout ()
、一个带有 的 GridBagLayoutnew GridBagLayout ()
等)。但是,BoxLayout
这要求您同时传递它将管理的容器和组件应沿其布置的轴。
我的问题是:既然您已经告诉布局管理器要布局哪个组件,为什么还需要编写
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
而不仅仅是第一行?
我快速查看了BoxLayout
源代码,发现我使用的构造函数(第 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);
}
}