Выравнивание JLabel с JScrollPane в BoxLayout

Я пытаюсь выровнять JLabel и JScrollPane (содержащий JTextArea) слева от JPanel. Когда я помещаю JTextArea непосредственно на панель, выравнивание правильное. Выравнивание неверно только в том случае, если JTextArea находится в области прокрутки.

import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Main {

    public static void main(String[] args) {
        JDialog dialog = new JDialog();
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        panel.add(new JLabel("My Label"));
        // panel.add(new JTextArea(3, 15));
        panel.add(new JScrollPane(new JTextArea(3, 15)));
        dialog.add(panel);
        dialog.pack();
        dialog.setVisible(true);
    }
}

Первое изображение ниже — с панелью прокрутки, а второе — без нее. Как правильно выровнять панель прокрутки?

Невыровненный диалогВыровненный диалог


person gsingh2011    schedule 19.02.2013    source источник


Ответы (2)


Попробуйте использовать alignmentX:

import java.awt.Component;

import javax.swing.*;

public class Main {

    public static void main(String[] args) {
        JDialog dialog = new JDialog();
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        JLabel label = new JLabel("My Label");
        label.setAlignmentX(Component.LEFT_ALIGNMENT);
        panel.add(label);

        JScrollPane pane = new JScrollPane(new JTextArea(3, 15));
        pane.setAlignmentX(Component.LEFT_ALIGNMENT);
        panel.add(pane);

        dialog.add(panel);
        dialog.pack();
        dialog.setVisible(true);
    }
}
person Sébastien Le Callonnec    schedule 19.02.2013

Заменять:

panel.add(new JLabel("My Label"));

By:

JPanel labelPan = new JPanel(new FlowLayout(FlowLayout.LEFT);
labelPan.add(new JLabel("My Label"));
panel.add(labelPan);
person elias    schedule 19.02.2013