Как правильно выровнять текст внутри JLabel? - PullRequest
4 голосов
/ 06 июня 2011

У меня есть следующий код:

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

for(int xx =0; xx < 3; xx++)
{
    JLabel label = new JLabel("String");
    label.setPreferredSize(new Dimension(300,15));
    label.setHorizontalAlignment(JLabel.RIGHT);

    panel.add(label);
}

Вот как бы я хотел, чтобы текст выглядел:

[                         String]
[                         String]
[                         String]

вот так это выглядит

[String]
[String]
[String]

По какой-то причине метка не устанавливается в указанном мной предпочтительном размере, и я думаю, что из-за этого она неправильно выравнивает текст метки. Но я не уверен. Любая помощь будет оценена.

Ответы [ 9 ]

13 голосов
/ 27 февраля 2013
JLabel label = new JLabel("String", SwingConstants.RIGHT);

:)

5 голосов
/ 06 июня 2011

Методы setPreferredSize / MinimumSize / MaximumSize зависят от менеджера компоновки родительского компонента (в данном случае панели).

Сначала попробуйте использовать setMaximumSize вместо setPreferredSize, если я не ошибаюсь, следует работать с BoxLayout.

Кроме того: вероятно, вы должны использовать и поиграть с клеями:

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());

Если вам нужен Y_AXIS BoxLayout, вы также можете использовать вложенную панель:

verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));    
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());
verticalPanel.add(panel);
5 голосов
/ 06 июня 2011

Я думаю, что это зависит от используемого вами макета, в XY (я помню, это был какой-то макет в JBuilder), он должен работать, но в другом могут возникнуть проблемы.Попробуйте изменить минимальный размер на предпочтительный размер.

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

Это немного раздражает, но вы можете использовать вложенные JPanels с макетами блоков, если вы хотите больше гибкости при выравнивании, чем при компоновке сетки.

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


    for (int xx = 0; xx < 3; xx++) {
        JPanel temp = new JPanel();
        temp.setLayout(new BoxLayout(temp,BoxLayout.LINE_AXIS));

        JLabel label = new JLabel("String");
        temp.add(Box.createHorizontalGlue());

        temp.add(label);
        panel.add(temp);
    }

Я использовал горизонтальный клей, чтобы держать его справанезависимо от размера, но вы можете поместить в жестких областях, чтобы сделать это определенное расстояние.

2 голосов
/ 07 июня 2011
myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
2 голосов
/ 06 июня 2011

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

1 голос
/ 30 сентября 2012

Не могли бы вы использовать следующее?

Jlabel label = new JLabel("String");
label.setBounds(x, y, width, height); // <-- Note the different method used.
label.setHorizontalAlignment(JLabel.RIGHT);

Это работает как минимум в контейнере JFrame.Не уверен насчет JPanel.

1 голос
/ 15 июля 2012

вместо использования

label.setHorizontalAlignment(JLabel.RIGHT);

использования

label.setHorizontalAlignment(SwingConstants.RIGHT);

, таким образом, у вас есть:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int xx =0; xx < 3; xx++)
{
    JLabel label = new JLabel("String");
    label.setPreferredSize(new Dimension(300,15));
    label.setHorizontalAlignment(SwingConstants.RIGHT);
    panel.add(label);
}
0 голосов
/ 06 июня 2011

Получив ответы от вас, ребята, я смог определить, что BoxLayout не поддерживает требуемое выравнивание текста, поэтому я изменил его на

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1,0,0);

и все работало нормально.

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