Nova linha em JLabel

107

Como posso exibir uma nova linha em JLabel?

Por exemplo, se eu quisesse:

Olá Mundo!
blá blá blá

Isso é o que eu tenho agora:

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

Isso é o que é exibido:

Hello World! Blahblahblah

Perdoe-me se esta é uma pergunta idiota, estou apenas aprendendo algumas noções básicas do Swing ...

mportiz08
fonte
1
Definitivamente, não é uma pergunta idiota. Levei um tempo para descobrir que html também era possível no swing.
Simon Baars,

Respostas:

174

Cerque a corda com <html></html>e quebre as linhas com <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);
freitass
fonte
3
apenas uma pequena correção: use <br /> em vez de apenas <br> ... esta é a maneira recomendada de fazer (para não perder nenhuma tag de fechamento) ... boa codificação ...
Nitin Bansal
6
@NitinBansal Na verdade, é recomendado na nova versão do HTML deixá-lo como <br>. É chamado de tag void. <br /> ainda funciona para compatibilidade com versões anteriores.
gsingh2011
@ gsingh2011: ok ... isso é melhor :-)
Nitin Bansal
3
Alguma ideia POR QUE JLabel não suporta novas linhas por padrão?
ApproachingDarknessFish
2
Na verdade, você nem mesmo precisa fechar a tag html. Se você precisar acrescentar texto em tempo de execução, isso simplifica muito!
Roberto
9

Você pode tentar fazer isso:

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

As vantagens de fazer isso são:

  • Ele substitui todas as novas linhas com <br/>, sem falhas.
  • Ele substitui automaticamente eventual <e >com &lt;e &gt;respectivamente, evitando alguns erros de renderização.

O que ele faz é:

  • "<html>" +adiciona uma htmltag de abertura no início
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")fugas <e >por conveniência
  • .replaceAll("\n", "<br/>")substitui todas as novas linhas por brtags (quebra de linha HTML) para o que você queria
  • ... e + "</html>"fecha nossa htmltag no final.

PS: Lamento muito acordar com um post tão antigo, mas enfim, você tem um snippet confiável para o seu Java!

TheSola10
fonte
2

Você pode fazer

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

e irá envolvê-lo automaticamente quando apropriado.

Nevster
fonte
2

Obrigado Aakash por recomendar o JIDE MultilineLabel. O StyledLabel do JIDE também foi aprimorado recentemente para oferecer suporte a várias linhas. Eu recomendaria em vez do MultilineLabel, pois tem muitos outros recursos excelentes. Você pode verificar um artigo sobre StyledLabel abaixo. Ele ainda é gratuito e de código aberto.

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

jidesoft
fonte
1

JLabel é realmente capaz de exibir algum HTML rudimentar, razão pela qual ele não está respondendo ao uso do caractere de nova linha (ao contrário, digamos, de System.out).

Se você inserir o HTML correspondente e usá- <BR>lo, obterá suas novas linhas.

Uri
fonte
suspiro Tentei adicionar crases para escapar do seu html, mas diz que não posso editar a menos que esteja adicionando pelo menos 6 caracteres.
AnnanFay
1
@Annan Isso não é necessário em HTML. Você está falando sobre o suporte ao XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy
@ b1naryatr0phy na, o problema foi corrigido :) A postagem original tinha uma <br>tag literal que foi formatada por estouro de pilha como uma quebra de linha literal na postagem.
AnnanFay