大多数布局管理器都有无参数构造函数(也就是说,您可以使用`new FlowLayout()`创建一个FlowLayout,使用`new GridLayout()`创建一个GridLayout,使用`new GridBagLayout()`创建一个GridBagLayout等)。但是,`BoxLayout`要求您传递它将要管理的容器以及应该布置组件的轴线。
我的问题是:既然您已经告诉布局管理器要布置哪个组件,为什么还需要编写“箱”来指定要使用哪个轴线?
我的问题是:既然您已经告诉布局管理器要布置哪个组件,为什么还需要编写“箱”来指定要使用哪个轴线?
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
如何获取BoxLayout的全部代码而不仅仅是第一行?
我快速查看了BoxLayout源代码,发现我使用的构造函数(178-185行)没有调用target.setLayout(this)
或类似的内容。看起来很容易添加这个功能。Swing库为什么没有包含它呢?
如果有影响的话,我正在使用:
java版本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);
}
}