Почему объект отступает с помощью Swing BoxLayout - PullRequest
4 голосов
/ 22 февраля 2010

Может кто-нибудь объяснить, почему текст "Опции" имеет отступ здесь? Это похоже на ошибку в BoxLayout. ТИА

import javax.swing.*;
import java.awt.*;

public class BoxLayoutIssue {

    public static void main(String[] args) {

        JFrame f = new JFrame();
        f.setSize(240, 250);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        JLabel label = new JLabel("Option");
        panel.add(label);

        JLabel a = new JLabel("A");
        JLabel b = new JLabel("B");
        JLabel c = new JLabel("C");
        JLabel d = new JLabel("D");
        JLabel e = new JLabel("E");

        Box box = Box.createVerticalBox();
        box.add(a);
        box.add(b);
        box.add(c);
        box.add(d);
        box.add(e);

        JScrollPane jscrlpBox = new JScrollPane(box);
        jscrlpBox.setPreferredSize(new Dimension(140, 90));
        panel.add(jscrlpBox);

        f.add(panel);

        f.setVisible(true);
    }
}

Ответы [ 2 ]

4 голосов
/ 22 февраля 2010

Проблема здесь в том, что JLabel выравнивает свой правый край с центром панели, а полоса прокрутки выравнивает свой центр с центром панели.

Мне удалось исправить это, добавив две строки, установив горизонтальное выравнивание для label и jscrlpBox на Component.LEFT_ALIGNMENT:

JLabel label = new JLabel("Option");
label.setAlignmentX(Component.LEFT_ALIGNMENT); // Added

panel.add(label);

JLabel a = new JLabel("A");
JLabel b = new JLabel("B");
JLabel c = new JLabel("C");
JLabel d = new JLabel("D");
JLabel e = new JLabel("E");

Box box = Box.createVerticalBox();
box.add(a);
box.add(b);
box.add(c);
box.add(d);
box.add(e);

JScrollPane jscrlpBox = new JScrollPane(box);
jscrlpBox.setPreferredSize(new Dimension(140, 90));
panel.add(jscrlpBox);
jscrlpBox.setAlignmentX(Component.LEFT_ALIGNMENT); // Added

В общем, при устранении неполадок, подобных этому, я пытаюсь добавить ярко окрашенную границу линии для компонентов (в данном случае, label), которые находятся не там, где я хочу, чтобы они были. Именно тогда я понял, что он выравнивает свой правый край с той же линией, которую другой компонент использовал для выравнивания своего центра.

2 голосов
/ 22 февраля 2010

Прочитайте раздел из учебника по Swing на Использование макета коробки . Там есть несколько примеров, которые пытаются объяснить, как «выравнивание X» каждого компонента может повлиять на макет.

Если вы опишите, что вы пытаетесь сделать, или что вы ожидаете, может быть, мы можем предложить другую комбинацию менеджеров компоновки для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...