JLabel con varias lineas

Alejandro
21 de Marzo del 2006
Saludos compañeros, quiero en un JLabel ir añadiendo sucesivamente cosas:
es decir, por ejemplo, primero añadir la cadena "esto", luego en un bucle posterior la cadena "es un" y luego la cadena "ejemplo", de manera que quede:
esto
es un
ejemplo

Existe alguna manera de hacerlo, o si no, algun otro metodo para hacerlo, xo de manera que al presentar dicho componente por pantalla quede como el JLabel, es decir, con el mismo color de fondo d la aplicacion, y sin bordes alrededor ??? Espero que me haya explicado bien. Por favor espero vuestras respuestas. Gracias por adelantado.

Diego
21 de Marzo del 2006
No se si funcionará, pero puedes intentar crear un String con varias líneas. Este código sólo funcionará en jdk 1.5.0:

public static String cadenaLineas(String... lineas){
String saltoDeLinea=System.getProperty(line.separator);
StringBuilder cadena=new StringBuilder();
for(String linea:lineas)
cadena.append(linea);
cadena.append(saltoDeLinea);
}
return cadena.toString();
}

Espero que te sirva.

Diego
21 de Marzo del 2006
Se puede mejorar el anterior método de modo que acepte cualquier tipo de parámetro y darle más potencia al mismo. Por ejemplo, imagina que quieres mostrar la fecha en el botón, o un número. Esto se conseguiría así:

public static<E> String cadenaLineas(E... lineas){
String saltoDeLinea=System.getProperty("line.separator");
StringBuilder cadena=new StringBuilder();
for(E elemento:lineas){
cadena.append(elemento);
cadena.append(saltoDeLinea);
}
return cadena.toString();
}

De este modo podemos compilar la siguiente línea y que funcione:

System.out.println(cadenaLineas("La fecha es:",new java.util.Date(),10));

Diego
21 de Marzo del 2006
No te he explicado como se usa el método. Bueno, lo importante es quedarse con la idea, no hacer un método, aunque si es algo que haces con regularidad, es interesante crear una clase Cadenas o algo así que te proporcione métodos al respecto.
Ejemplo de uso:

...
Label.setText(cadenaLineas("Hola","a","todos"));
Incluso el método podías hacerlo de modo que se pudieran meter elementos de otro tipo, aprovechando que append está sobrecargado para todo tipo de elementos:

public static<E> String cadenaLineas(E... lineas){
String saltoDeLinea=System.getProperty(line.separator);
StringBuilder cadena=new StringBuilder();
for(E linea:lineas)
cadena.append(linea);
cadena.append(saltoDeLinea);
}
return cadena.toString();
}

Así puedes hacer, por ejemplo:
System.out.println(cadenaLineas("La fecha es:",new java.util.Date(),10));
y mostrar cualquier tipo de dato, lo que, aunque ahora mismo no te parezca útil, hace que el método sea más potente.

x
21 de Marzo del 2006
los JLabel aceptan còdigo HTML, y te sirve justo para lo que quieres, prueba a hacer esto:

JLabel label = new JLabel( "<html>Esto<br>es un<br>ejemplo</html>");

Para que funcione, las etiquetas de html deben abrir y cerrar forzosamente el String

Alejandro
21 de Marzo del 2006
Gracias por vuestra ayuda, lo he conseguido solucionar tb con un JTextArea, y poniendole setOpaque(false) para que tenga el color de fondo.