2010-01-28 9 views
44

Eventuali duplicati:
Multiline text in JLabelaltalena Java: etichette multilinea?

Voglio fare questo:

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

Attualmente questo si traduce in un'etichetta che visualizza

This isa multi-line string 

Voglio invece farlo:

This is 
a multi-line string 

Qualche suggerimento?

Grazie


EDIT: soluzione implementata

Nel corpo del metodo: il metodo

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

Helper:

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

E 'possibile per l'oggetto Label in SWT? –

risposta

56

È possibile utilizzare HTML in JLabels. Per usarlo, il testo deve iniziare con <html>.

Impostare il testo su "<html>This is<br>a multi-line string" e dovrebbe funzionare.

Vedere Swing Tutorial: JLabel e Multiline label (HTML) per ulteriori informazioni.

2

JLabel possibile accettare codice html. Forse puoi provare a usare il tag <br>.

Esempio:

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

La procedura diretta di scrivere un testo su più righe in un JLabel è:

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

Un altro modo semplice (ma cambia lo stile del testo un po ') è quello di utilizzare un blocco <pre></pre> html .

Ciò consente di mantenere qualsiasi formattazione immessa dall'utente se la stringa utilizzata proviene da una casella di input utente.

Esempio:

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

Bella cattura. Ma bisogna menzionare che questo cambia anche il carattere (a livello monospaziale), che non è sempre desiderato. –

5

Il problema con l'utilizzo di HTML in JLabel o qualsiasi componente Swing è che è quindi necessario per lo stile come HTML, non con la solita setFont, setForeground, ecc Se sei ok con quello, bene.

Altrimenti è possibile utilizzare qualcosa come MultilineLabel da JIDE, che estende JTextArea.Fa parte del loro open source 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); 
    } 
} 

E sembra totalmente lo stesso per me, ma la sua brutta

+0

Non è affatto brutto! Ho finito per costruire su questo facendo sì che il mio componente estendesse JScrollPane, che a sua volta avvolgeva un JTextArea configurato esattamente come tu hai qui. Il wrapping in JScrollPane consente alla cosa di ridursi dopo che è stata ridimensionata a una larghezza maggiore. –

+0

Grazie per la risposta utile! Per abbellirlo un po ', puoi anche rimuovere il bordo della linea, aggiungere inserti e allineare il centro in modo veritiero: setBorder (new EmptyBorder (5, 5, 5, 5)); setAlignmentY (JLabel.CENTER_ALIGNMENT); – Mariana