2009-07-07 10 views
81

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

Por ejemplo, si quería:

Hello World!
blahblahblah

Esto es lo que tengo en este momento:

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

Esto es lo que se muestra:

Hello World blahblahblah

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

+0

Definitivamente no es una pregunta tonta. Me tomó un tiempo descubrir que html también era posible en swing. –

Respuesta

138

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); 
+1

solo una pequeña corrección: use
en lugar de solo
... esta es la manera recomendada de hacerlo (para no perder ninguna etiqueta de cierre) ... feliz codificación ... –

+5

@NitinBansal En realidad, se recomienda en la nueva versión de HTML para dejarlo como
. Se llama etiqueta vacía.
todavía funciona por compatibilidad con versiones anteriores. – gsingh2011

+0

@ gsingh2011: ok ... eso es mejor :-) –

1

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

Si coloca el código HTML correspondiente y utiliza <BR>, obtendrá sus nuevas líneas.

+0

* suspiro * Traté de agregar "backticks" para escapar de su html, sin embargo, dice que no puedo editar a menos que agregue al menos 6 caracteres. – Annan

+1

@Annan Eso no es necesario en HTML. De lo que estás hablando es de apoyar XHTML. http://stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br –

+0

@ b1naryatr0phy na, el problema se solucionó :) La publicación original tenía una etiqueta literal '
' que era formateado por desbordamiento de pila como un salto de línea literal en la publicación. – Annan

2

Usted puede hacer

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

y se ajuste automáticamente cuando proceda.

2

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

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

4

se puede tratar de hacer esto:

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

Las ventajas de hacer esto son:

  • se reemplazan todos los saltos de línea con <br/>, sin falta.
  • Reemplaza automáticamente eventuales < y > con &lt; y &gt;, respectivamente, evitando algunos estragos en el renderizado.

Lo que hace es:

  • "<html>" + añade un html etiqueta de apertura al comienzo
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;") escapa < y > por conveniencia
  • .replaceAll("\n", "<br/>") reemplaza todos los saltos de línea por br (salto de línea HTML) etiquetas para lo que quería
  • ... y + "</html>" cierra nuestra etiqueta html al final.

P.S .: Lamento mucho haber despertado una publicación tan antigua, pero sea lo que sea, ¡tienes un fragmento confiable para tu Java!