Зачем вам нужно вызывать setLayout с BoxLayout?

Большинство менеджеров компоновки имеют конструкторы без аргументов (то есть вы можете создать FlowLayout с new FlowLayout (), GridLayout с new GridLayout (), GridBagLayout с новым 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 Runtime Environment (сборка 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);
    }
}

8
задан Radu Murzea 3 June 2012 в 07:46
поделиться