Новий рядок у JLabel


107

Як я можу відобразити новий рядок у JLabel?

Наприклад, якщо я хотів:

Привіт Світ!
бла-бла-бла

Це я зараз маю:

JLabel l = new JLabel("Hello World!\nblahblahblah", SwingConstants.CENTER);

Ось що відображається:

Привіт, світ!

Пробачте, якщо це німе питання, я просто вивчаю деякі основи Swing ...


1
Однозначно не тупе питання. Взяв у мене час, щоб зрозуміти, що html був можливий і в розпалі.
Simon Baars

Відповіді:


174

Обведіть рядок с <html></html>і перервіть лінії з <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);

3
лише невелика корекція: використовуйте <br /> замість просто <br> ... це рекомендований спосіб зробити це (щоб не пропустити жодних закриваючих тегів) ... щасливе кодування ...
Нітін Бансал,

6
@NitinBansal Насправді в новій версії HTML рекомендується залишити його як <br>. Це називається пустим тегом. <br /> все ще працює для зворотної сумісності.
gsingh2011

@ gsingh2011: гаразд ... це краще :-)
Нітін Бансал

3
Будь-яка ідея Чому JLabel не підтримує нові рядки за замовчуванням?
Наближення

2
Ви фактично навіть не повинні закривати тег html. Якщо вам потрібно додати текст під час виконання, це значно спрощує його!
Роберто

9

Ви можете спробувати зробити це:

myLabel.setText("<html>" + myString.replaceAll("<","&lt;").replaceAll(">", "&gt;").replaceAll("\n", "<br/>") + "</html>")

Перевагами цього є:

  • Він замінює всі нові рядки на <br/> безвідмовно.
  • Він автоматично замінює в кінцевому підсумку <і >з &lt;і , &gt;відповідно, запобігаючи деякі роблять спустошення.

Що це робить:

  • "<html>" +додає htmlтег відкриття на початку
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")втечі <та >для зручності
  • .replaceAll("\n", "<br/>")замінює всі нові рядки brтегами (HTML-розрив рядків) на те, що ви хотіли
  • ... і + "</html>"закриває наш htmlтег наприкінці.

PS: Мені дуже шкода, щоб прокинути такий старий пост, але що б у вас був надійний фрагмент для вашої Java!



2

Ви можете зробити

JLabel l = new JLabel("<html><p>Hello World! blah blah blah</p></html>", SwingConstants.CENTER);

і він автоматично обгортає його, де це доречно.


2

Дякуємо Aakash за рекомендацію JIDE MultilineLabel. StyledLabel JIDE також нещодавно покращений для підтримки декількох ліній. Я рекомендував би його над MultilineLabel, оскільки він має багато інших чудових функцій. Ви можете переглянути статтю про StyledLabel нижче. Він все ще є безкоштовним та відкритим кодом.

http://www.jidesoft.com/articles/StyledLabel.pdf


1

JLabel насправді здатний відображати деякий рудиментарний HTML, тому він не відповідає вашому використанню символу нового рядка (на відміну, скажімо, System.out).

Якщо ви введете відповідний HTML і використали <BR>, ви отримаєте ваші нові рядки.


зітхання Я спробував додати зворотні посилання, щоб уникнути вашого HTML, однак він говорить, що я не можу редагувати, якщо я не додаю щонайменше 6 символів.
AnnanFay

1
@Annan Це не обов'язково в HTML. Те, про що ви говорите, - це підтримка XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy

@ b1naryatr0phy na, проблема була виправлена ​​:) У початковій публікації був буквальний <br>тег, який був відформатований переповненням стека як буквальний розрив рядка у публікації.
AnnanFay
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.