Nueva línea en JLabel

107

¿Cómo puedo mostrar una nueva línea JLabel?

Por ejemplo, si quisiera:

Hola Mundo!
bla, bla, bla

Esto es lo que tengo ahora mismo:

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

Esto es lo que se muestra:

¡Hola mundo! Blahblahblah

Perdóname si esta es una pregunta tonta, estoy aprendiendo algunos conceptos básicos de Swing ...

mportiz08
fuente
1
Definitivamente no es una pregunta tonta. Me tomó un tiempo descubrir que html también era posible en swing.
Simon Baars

Respuestas:

174

Rodea la cuerda con <html></html>y rompe las líneas con <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);
freitass
fuente
3
solo una pequeña corrección: use <br /> en lugar de solo <br> ... esta es la forma recomendada de hacerlo (para no perder ninguna etiqueta de cierre) ... codificación feliz ...
Nitin Bansal
6
@NitinBansal En realidad, se recomienda en la nueva versión de HTML dejarlo como <br>. Se llama etiqueta nula. <br /> todavía funciona para compatibilidad con versiones anteriores.
gsingh2011
@ gsingh2011: ok ... eso es mejor :-)
Nitin Bansal
3
¿Alguna idea de POR QUÉ JLabel no admite nuevas líneas de forma predeterminada?
ApproachingDarknessFish
2
En realidad, ni siquiera tiene que cerrar la etiqueta html. Si necesita agregar texto en tiempo de ejecución, ¡esto lo simplifica mucho!
Roberto
9

Puedes intentar hacer esto:

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

Las ventajas de hacer esto son:

  • Reemplaza todas las nuevas líneas con <br/>, sin falta.
  • Reemplaza automáticamente eventual <y >con &lt;y &gt;respectivamente, evitando algunos estragos en el renderizado.

Lo que hace es:

  • "<html>" +agrega una htmletiqueta de apertura al principio
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")escapa <y >por conveniencia
  • .replaceAll("\n", "<br/>")reemplaza todas las líneas nuevas por bretiquetas (salto de línea HTML) para lo que deseaba
  • ... y + "</html>"cierra nuestra htmletiqueta al final.

PD: Lamento mucho despertar una publicación tan antigua, pero lo que sea, ¡tienes un fragmento confiable para tu Java!

TheSola10
fuente
2

Tu puedes hacer

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

y lo envolverá automáticamente donde corresponda.

nevster
fuente
2

Gracias Aakash por recomendar JIDE MultilineLabel. StyledLabel de JIDE también se ha mejorado recientemente para admitir varias líneas. Lo recomendaría sobre MultilineLabel ya que tiene muchas otras características excelentes. Puede consultar un artículo sobre StyledLabel a continuación. Sigue siendo gratuito y de código abierto.

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

jidesoft
fuente
1

JLabel es realmente capaz de mostrar algo de HTML rudimentario, por lo que no responde al uso del carácter de nueva línea (a diferencia de, digamos, System.out).

Si pones el HTML correspondiente y lo <BR>usas, obtendrás tus nuevas líneas.

Uri
fuente
suspiro Intenté agregar comillas invertidas para escapar de tu html, sin embargo, dice que no puedo editar a menos que agregue al menos 6 caracteres.
AnnanFay
1
@Annan Eso no es necesario en HTML. De lo que estás hablando es de admitir XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy
@ b1naryatr0phy na, el problema se solucionó :) La publicación original tenía una <br>etiqueta literal que fue formateada por stack-overflow como un salto de línea literal en la publicación.
AnnanFay