Nuova riga in JLabel


107

Come posso visualizzare una nuova riga in JLabel ?

Ad esempio, se volessi:

Ciao mondo!
blahblahblah

Questo è quello che ho adesso:

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

Questo è ciò che viene visualizzato:

Hello World! Blahblahblah

Perdonami se questa è una domanda stupida, sto solo imparando alcune basi dello Swing ...


1
Sicuramente non è una domanda stupida. Mi ci è voluto un po 'per capire che html fosse possibile anche in swing.
Simon Baars

Risposte:


174

Circonda la corda con <html></html>e spezza le linee con <br/>.

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

3
solo una piccola correzione: usa <br /> invece di solo <br> ... questo è il modo consigliato di farlo (per non perdere nessun tag di chiusura) ... felice codifica ...
Nitin Bansal

6
@NitinBansal In realtà, nella nuova versione di HTML si consiglia di lasciarlo come <br>. Si chiama tag void. <br /> funziona ancora per la retrocompatibilità.
gsingh2011

@ gsingh2011: ok ... va meglio :-)
Nitin Bansal

3
Qualche idea PERCHÉ JLabel non supportano le nuove righe di default?
ApproachingDarknessFish

2
In realtà non devi nemmeno chiudere il tag html. Se è necessario aggiungere del testo in runtime, questo lo semplifica molto!
Roberto

9

Puoi provare a farlo:

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

I vantaggi di fare questo sono:

  • Sostituisce tutte le nuove righe con <br/> , senza fallo.
  • Sostituisce automaticamente l'eventuale <e >con &lt;e &gt;rispettivamente, prevenendo qualche caos di rendering.

Quello che fa è:

  • "<html>" +aggiunge un htmltag di apertura all'inizio
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")scappa <e >per comodità
  • .replaceAll("\n", "<br/>") sostituisce tutte le nuove righe di br tag (interruzione di riga HTML) per ciò che volevi
  • ... e + "</html>"chiude il nostro htmltag alla fine.

PS: mi dispiace molto svegliare un post così vecchio, ma comunque, hai uno snippet affidabile per il tuo Java!



2

Tu puoi fare

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

e lo avvolgerà automaticamente dove appropriato.


2

Grazie Aakash per aver consigliato JIDE MultilineLabel. Anche StyledLabel di JIDE è stata recentemente migliorata per supportare più righe. Lo consiglierei su MultilineLabel perché ha molte altre fantastiche funzionalità. Puoi controllare un articolo su StyledLabel di seguito. È ancora gratuito e open source.

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


1

JLabel è effettivamente in grado di visualizzare un codice HTML rudimentale, motivo per cui non risponde al tuo uso del carattere di nuova riga (a differenza, ad esempio, di System.out).

Se inserisci il codice HTML corrispondente e lo utilizzi <BR>, otterrai le nuove righe.


sigh ho provato ad aggiungere backtick per sfuggire al tuo html, tuttavia dice che non posso modificare a meno che non aggiungo almeno 6 caratteri.
AnnanFay

1
@Annan Questo non è necessario in HTML. Quello di cui stai parlando è supportare XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy

@ b1naryatr0phy na, il problema è stato risolto :) Il post originale aveva un <br>tag letterale formattato da stack-overflow come un'interruzione di riga letterale nel post.
AnnanFay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.