有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么需要用BoxLayout调用setLayout?

大多数布局管理器没有参数构造函数(也就是说,您可以创建带有new FlowLayout ()的FlowLayout、带有new GridLayout ()的GridLayout、带有new GridBagLayout ()的GridBagLayout等)。但是,BoxLayout要求传递它将要管理的容器和组件应该沿其布置的轴

我的问题是:既然您已经告诉布局管理器要布局哪个组件,为什么需要编写

BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);

而不仅仅是第一行

我快速查看了一下the ^{} 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);
    }
}

共 (0) 个答案