2011-08-08 21 views
9

como dice el título: Necesito colocar una etiqueta J en un marco horizontal, pero el texto en la etiqueta J es demasiado largo, así que necesito agregar algunos saltos de línea. El texto en JLabel se obtiene de un archivo XML en línea, por lo que no puedo cambiar el texto para contener saltos de línea.Cómo caber una cadena larga en una etiqueta JLabel

Este código extrae datos del archivo XML

Element element = (Element)nodes1.item(i); 
      String vær = getElementValue(element,"body"); 
      String v = vær.replaceAll("<.*>", ""); 
      String forecast = "Vær: " + v; 

en este caso la cadena Quiero añadir algunos saltos de línea a la cadena de v. La cadena V contiene los datos procesados ​​del archivo XML. La previsión de String se devuelve y se establece como texto en JLabel.

Solo pregunte si algo no está claro, gracias de antemano!

Respuesta

12

Sugiero usar un JTextArea en su lugar y activar el envoltorio. La única manera de hacerlo en un JLabel es poner saltos de línea <br />, que no funcionaría (al menos no fácilmente) en su situación si no conoce el texto de antemano.

JTextArea es mucho más flexible. De forma predeterminada, se ve diferente, pero puede juguetear con algunas de las propiedades de visualización para que se vea como JLabel.


Un simple modificado ejemplo de uso tomado de la How to Use Text Areas tutorial -

public class JTextAreaDemo { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() {   
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame("JTextArea Demo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     final JPanel panel = new JPanel(); 
     JTextArea textArea = new JTextArea(
       "If there is anything the nonconformist hates worse " + 
       "than a conformist, it's another nonconformist who " + 
       "doesn't conform to the prevailing standard of nonconformity.", 
       6, 
       20); 
     textArea.setFont(new Font("Serif", Font.ITALIC, 16)); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     textArea.setOpaque(false); 
     textArea.setEditable(false); 

     panel.add(textArea); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

enter image description here

+1

+1, Es posible que también desee que el componente no sea opaco (es decir, 'setOpaque (false) '). – mre

+0

Incluí un ejemplo de uso simple. Si siente que esto no es necesario, hágamelo saber y lo retrotraeré. :) – mre

+0

Pero, ¿cómo puedo cambiar el tamaño de JTextArea por lo que solo contiene ciertos caracteres en cada línea. por ejemplo, 30 Charcaters en cada línea antes de linebreak? Cus: quiero que el JPanel esté en toda la pantalla y no en el paquete(); –

5

JLabel puede mostrar texto HTML, es decir, si ajusta el texto con <html>your text<html>, es posible que pueda ajustar el texto. Eso no está probado, así que YMMV.

+1

+1, Y aquí hay un buen tutorial - [Cómo Use HTML en Swing Components] (http://download.oracle.com/javase/tutorial/uiswing/components/html.html) – mre

1

se puede decir de forma dinámica el JLabel para cambiar el tamaño sí para ajustar el texto.

si no está utilizando un intento LayoutManager:

 jLabel.setText ("A somewaht long message I would not want to 
stop"); 
     jLabel.setSize(jLabel.getPreferredSize()); 

Si está utilizando un controlador de disposición este fragmento debería funcionar:

 jLabel.setText ("A somewaht long message I would not want to 
stop"); 
     jLabel.validate(); 
Cuestiones relacionadas