Горизонтальное позиционирование JLabel не работает должным образом - PullRequest
2 голосов
/ 09 июня 2011

Вот JFrame, который я намеревался показать с помощью серии JLabels со следующими свойствами:

  • , сложенных вертикально
  • по центру по горизонтали
  • зеленая рамка
  • белый фон
  • синий текст

Но я получаю это вместо:

enter image description here

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

Что я делаю не так?


edit: пропущено этот вопрос о фонецвет.Итак, мой оставшийся вопрос касается BoxLayout и расположения компонентов на другой оси.


import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class BoxLayoutLabelsTest extends JFrame
{
    public BoxLayoutLabelsTest(String title)
    {
        super(title);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        addLabel(panel, "Hydrogen");
        addLabel(panel, "Helium");
        addLabel(panel, "Lithium");
        addLabel(panel, "Beryllium");
        addLabel(panel, "Boron");

        setContentPane(panel);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    static private void addLabel(JPanel panel, String text) {
        JLabel label = new JLabel(text);
        label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        label.setBackground(Color.WHITE);
        label.setForeground(Color.BLUE);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(label);
    }

    public static void main(String[] args) {
        new BoxLayoutLabelsTest("BoxLayoutLabelsTest").setVisible(true);
    }

}

1 Ответ

3 голосов
/ 09 июня 2011

Добавьте следующую строку в addLabel():

label.setAlignmentX(CENTER_ALIGNMENT);

См. Как использовать BoxLayout для полного примера.

Добавлено позже:

Я нашел простое решение:

label.setMaximumSize(new Dimension(200, 200));
//label.setAlignmentX(CENTER_ALIGNMENT);//aligns label itself
label.setHorizontalAlignment(SwingConstants.CENTER);//aligns text inside the label

Это также работает, но ваше решение с BorderLayout кажется более подходящим.

...