Багаторядковий текст у JLabel


79

Як я можу зробити так, щоб текст JLabel поширювався на інший рядок?


1
@ChrisDennett - Це також нормально просто закрити як дубль без будь-яких розумних зауважень :)
ripper234

Я думаю, це було ще до того, як я навіть мав привілей голосувати, щоб закрити.
Chris Dennett

Відповіді:


86

Ви можете зробити це, вставивши HTML в код, так:

JFrame frame = new JFrame();
frame.setLayout(new GridLayout());
JLabel label = new JLabel("<html>First line<br>Second line</html>");
frame.add(label);
frame.pack();
frame.setVisible(true);

У мене є дві панелі .. як я можу зробити так, щоб друга панель з’являлася в наступному рядку? наприклад lbl1 - перший рядок, lbl2 --- другий рядок. JLabel lbl1 = новий JLabel ("Мітка 1:"); panel.add (lbl1); JLabel lbl2 = новий JLabel ("Етикетка 2"); panel.add (lbl2);
Джессі

1
Ви можете отримати деякі проблеми з форматуванням, якщо стиль тексту за замовчуванням для міток не відповідає стилю HTML. Хоча дев'ять разів із десяти це спрацює ...
Том Хоутін - таклін

1
Для 2 панелей одна під одною просто використовуйте GridLayout з 2 рядками та 1 стовпцем. Легкий горошок :)
tddmonkey

7
Це я передбачаю майбутнє на StackOverflow через два роки: "Як я можу зробити лист Aу своєму JLabel?" Відповідь: Примусьте JLabel використовувати HTML та використовувати сутність HTML&#65;
Саймон Форсберг

Не забудьте встановити бажаний розмір ярлика для обгортання, щоб він набрав чинності.
деревокодер

17

якщо ви хочете, щоб ваш текст jLabel автоматично змінював розмір, наприклад, у розтяжній сітці, досить просто розмістити його текст у тегах html так:

JLabel label = new JLabel("<html>First line and maybe second line</html>");

14

Я використовував JTextArea для багаторядкових JLabels.

JTextArea textarea = new JTextArea ("1\n2\n3\n"+"4\n");

http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html


1
Не можу повірити, що про це згадується більше! Всюди люди кажуть, що використовують режим HTML, який порушує багато речей, таких як додатковий інтервал.
рококо

8

Введіть вміст (тобто поле властивості "текст") всередині <html></html>тегу. Таким чином, ви можете використовувати <br>або, <P>щоб вставити новий рядок.

Наприклад:

String labelContent = "<html>Twinkle, twinkle, little star,<BR>How I wonder what you are.<BR>Up above the world so high,<BR>Like a diamond in the sky.</html>";

Він відображатиметься наступним чином:

Миготіння, мерехтіння, зіронько,
Як мені цікаво, що ти.
Вгорі над світом так високо,
Немов діамант у небі.


6

Ви також можете використовувати JXLabel з бібліотеки SwingX .

JXLabel multiline = new JXLabel("this is a \nMultiline Text");
multiline.setLineWrap(true);

3
Ця відповідь виглядала найкращою, поки я не помітив, що JXLabel - це не стандартна Java, і ви не згадали, з якої бібліотеки вона походить.
Відновити Моніку 2331977


4

Це жахливо. Усі ці відповіді пропонують додати на початок тексту мітки, і в документації Java 11 (або раніше) для JLabel немає жодного слова, що вказує на те, що текст мітки обробляється по-різному, якщо це трапляється починати з <html>. Хто каже, що працює скрізь і завжди буде? І ви можете отримати великі, великі сюрпризи, обертаючи довільний текст і передаючи його в механізм HTML-верстки.

Я підтримав відповідь, яка пропонує JTextArea. Але я зауважу, що JTextArea - це не заміна, що випадає; за замовчуванням він розширюється, заповнюючи рядки, не так діє JLabel. Я ще не придумав рішення цього.


3

У моєму випадку було достатньо розділити текст на кожен, \nа потім створити JLabelдля кожного рядка:

JPanel panel = new JPanel(new GridLayout(0,1));
String[] lines = message.split("\n");
for (String line : lines) {
    JLabel label = new JLabel(line);
    panel.add(label);
}

Я використовував вище в JOptionPane.showMessageDialog


1

Ви можете використовувати JTextAreaта вилучати можливості редагування, щоб отримувати звичайний багаторядковий текст лише для читання.

JTextArea textArea = new JTextArea("line\nline\nline");
textArea.setEditable(false);

JTextArea

setEditable



0
String labelText ="<html>Name :"+name+"<br>Surname :"+surname+"<br>Gender :"+gender+"</html>";
JLabel label=new JLabel(labelText);
label.setVisible(true);
label.setBounds(10, 10,300, 100);
dialog.add(label);

Хоча цей код може відповісти на запитання, надання додаткового контексту щодо того, чому та / або як він відповідає на питання, значно покращило б його довгострокову цінність. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення.
Toby Speight

-8

чому ви даєте складні речі ... ви можете просто зробити це, поставивши "\ n" замість тегів html


Очевидно, це не працює з JLabels, буде працювати лише з іншими TextComponents або JXlabels
kuranes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.