Новая строка в JLabel

107

Как я могу отобразить новую строку JLabel?

Например, если бы я хотел:

Привет мир!
бла бла бла

Вот что у меня сейчас:

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

Вот что отображается:

Привет мир! Бла-бла-бла

Простите меня, если это глупый вопрос, я только изучаю основы Swing ...

mportiz08
источник
1
Определенно не тупой вопрос. Мне потребовалось время, чтобы понять, что HTML тоже может развиваться.
Саймон Баарс

Ответы:

174

Обведите строку <html></html>и разорвите ее <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);
Freitass
источник
3
небольшое исправление: используйте <br /> вместо просто <br> ... это рекомендуемый способ (чтобы не пропустить закрывающие теги) ... удачное кодирование ...
Нитин Бансал,
6
@NitinBansal На самом деле в новой версии HTML рекомендуется оставить его как <br>. Это называется пустым тегом. <br /> по-прежнему работает для обеспечения обратной совместимости.
gsingh2011
@ gsingh2011: хорошо ... так лучше :-)
Nitin Bansal
3
Есть идеи, ПОЧЕМУ JLabel не поддерживает новые строки по умолчанию?
ApproachingDarknessFish
2
На самом деле вам даже не нужно закрывать тег html. Если вам нужно добавить текст во время выполнения, это значительно упростит его!
Роберто,
10

Вы можете попробовать сделать это:

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!

TheSola10
источник
2

Ты можешь сделать

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

и он автоматически обернет его там, где это необходимо.

Невстер
источник
2

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

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

jidesoft
источник
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