Как заставить JLabels начать со следующей строки - PullRequest
10 голосов
/ 08 октября 2009
JPanel pMeasure = new JPanel();
....
JLabel economy = new JLabel("Economy");
JLabel regularity = new JLabel("Regularity");
pMeasure.add(economy);
pMeasure.add(regularity);
...

Когда я запускаю код выше, я получаю этот вывод:

Economy Regularity

Как я могу получить этот вывод, где каждый JLabel начинается с новой строки? Спасибо

Economy  
Regularity

Ответы [ 5 ]

19 голосов
/ 08 октября 2009

Вам захочется поиграть с менеджерами компоновки , чтобы управлять расположением и размерами элементов управления в JPanel. Менеджеры по расположению отвечают за размещение элементов управления, определяя, куда они идут, насколько они велики, сколько места между ними, что происходит при изменении размера окна и т. Д.

Существует множество различных менеджеров компоновки, каждый из которых позволяет по-разному компоновать элементы управления. Менеджер компоновки по умолчанию - FlowLayout, который, как вы видели, просто размещает компоненты рядом друг с другом слева направо. Это самое простое. Некоторые другие распространенные менеджеры компоновки:

  • GridLayout - расположение компонентов в прямоугольной сетке с одинаковыми строками и столбцами
  • BorderLayout - имеет один основной компонент в центре и до четырех окружающих компонентов сверху, снизу, слева и справа.
  • GridBagLayout - Большая Берта из всех встроенных менеджеров макетов, она самая гибкая, но и самая сложная в использовании.

Вы можете, например, использовать BoxLayout для размещения меток.

BoxLayout либо укладывает свои компоненты друг на друга, либо размещает их в ряд - на ваш выбор. Вы можете думать об этом как о версии FlowLayout, но с большей функциональностью. Вот изображение приложения, которое демонстрирует использование BoxLayout для отображения центрированного столбца компонентов:

BoxLayout screenshot

Пример кода, использующего BoxLayout:

JPanel pMeasure = new JPanel();
....
JLabel economy = new JLabel("Economy");
JLabel regularity = new JLabel("Regularity");
pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS));
pMeasure.add(economy);
pMeasure.add(regularity);
...
5 голосов
/ 31 марта 2013

Я прочитал этот кусок кода:

 pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.VERTICAL));

Кажется, у BoxLayout нет VERTICAL. После поиска это будет работать с использованием следующего кода:

 pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS));
2 голосов
/ 17 августа 2011

Вот что вам нужно использовать:

JLabel economy = new JLabel("<html>Economy<br>Regularity</html>");
0 голосов
/ 20 января 2014

Создайте отдельную JPanel для каждой строки и установите размеры для соответствия каждому слову:

JLabel wordlabel = new JLabel("Word");

JPanel word1 = new JPanel();
word1.setPreferredSize(new Dimension(#,#);

Это должно работать для каждого слова. Затем вы можете добавить каждый из этих JPanels в ваш основной JPanel. Это также позволяет добавлять другие компоненты рядом с каждым словом.

0 голосов
/ 08 октября 2009

Быстрый способ - использовать html в JLabel. Например, включите тег <br/>.

В противном случае реализовать BoxLayout.

...