2010-01-28 157 views
44

Duplicar posible:
Multiline text in JLabelJava swing: ¿etiquetas de varias líneas?

Quiero hacer esto:

JLabel myLabel = new JLabel(); 
myLabel.setText("This is\na multi-line string"); 

Actualmente esto se traduce en una etiqueta que muestra

This isa multi-line string 

Quiero que haga esto en su lugar:

This is 
a multi-line string 

¿Alguna sugerencia?

Gracias


EDIT: solución implementada

En el cuerpo del método: Método

myLabel.setText(convertToMultiline("This is\na multi-line string")); 

Ayudante:

public static String convertToMultiline(String orig) 
{ 
    return "<html>" + orig.replaceAll("\n", "<br>"); 
} 
+0

¿Es posible que el objeto Label en el SWT? –

Respuesta

56

Puede utilizar HTML en JLabels. Para usarlo, su texto debe comenzar por <html>.

Establezca su texto en "<html>This is<br>a multi-line string" y debería funcionar.

Consulte Swing Tutorial: JLabel y Multiline label (HTML) para obtener más información.

2

JLabel puede aceptar código html. Tal vez puedas intentar usar la etiqueta <br>.

Ejemplo:

JLabel myLabel = new JLabel(); 
myLabel.setText("<html> This is a <br> multi-line string </html>"); 
5

El procedimiento directa de escribir un texto de varias líneas en un JLabel es:

JLabel label = new JLabel("<html>First Line<br>Second Line</html>"); 
6

Otra manera fácil (pero cambia el estilo de texto un poco) es el uso de un bloque <pre></pre> html .

Esto conservará cualquier formateo que el usuario ingrese si la cadena que está utilizando proviene de un cuadro de entrada de usuario.

Ejemplo:

JLabel label = new JLabel("<html><pre>First Line\nSecond Line</pre></html>"); 
+0

Buena captura. Pero debe mencionarse que esto también cambia la fuente (a monoespaciado), lo cual no siempre es deseado. –

5

El problema de usar HTML en JLabel o cualquier componente Swing es que luego hay que diseñarlo como html, no con la habitual setFont, setForeground, etc. Si estás bien con eso, bien.

De lo contrario, puede usar algo como MultilineLabel de JIDE, que se extiende JTextArea.Es parte de su código abierto Commom Layer.

11
public class JMultilineLabel extends JTextArea{ 
    private static final long serialVersionUID = 1L; 
    public JMultilineLabel(String text){ 
     super(text); 
     setEditable(false); 
     setCursor(null); 
     setOpaque(false); 
     setFocusable(false); 
     setFont(UIManager.getFont("Label.font"));  
     setWrapStyleWord(true); 
     setLineWrap(true); 
    } 
} 

Parece totalmente lo mismo para mí, pero su fea

+0

¡No es feo en absoluto! Terminé construyendo sobre esto haciendo que mi componente extienda JScrollPane que a su vez envolvió un JTextArea configurado exactamente como lo tiene aquí. El envoltorio en el JScrollPane permite que la cosa retroceda una vez que se ha redimensionado a un ancho mayor. –

+0

¡Gracias por la útil respuesta! Para embellecerlo un poco, también puedes quitar el borde de la línea, agregar inserciones y alinear el centro de forma verdica: setBorder (nuevo EmptyBorder (5, 5, 5, 5)); setAlignmentY (JLabel.CENTER_ALIGNMENT); – Mariana