Nouvelle ligne dans JLabel

107

Comment puis-je afficher une nouvelle ligne dans JLabel ?

Par exemple, si je voulais:

Bonjour le monde!
blahblahblah

Voici ce que j'ai en ce moment:

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

Voici ce qui s'affiche:

Bonjour tout le monde! Blahblahblah

Pardonnez-moi si c'est une question idiote, j'apprends juste quelques bases de Swing ...

mportiz08
la source
1
Certainement pas une question stupide. Il m'a fallu un certain temps pour comprendre que le HTML était également possible en swing.
Simon Baars

Réponses:

174

Entourez la corde <html></html>et coupez les lignes avec <br/>.

JLabel l = new JLabel("<html>Hello World!<br/>blahblahblah</html>", SwingConstants.CENTER);
freitass
la source
3
juste une petite correction: utilisez <br /> au lieu de juste <br> ... c'est la manière recommandée de le faire (pour ne manquer aucune balise de fermeture) ... happy coding ...
Nitin Bansal
6
@NitinBansal En fait, il est recommandé dans la nouvelle version de HTML de le laisser comme <br>. C'est ce qu'on appelle une balise vide. <br /> fonctionne toujours pour la compatibilité ascendante.
gsingh2011
@ gsingh2011: ok ... c'est mieux :-)
Nitin Bansal
3
Une idée POURQUOI JLabel ne prend pas en charge les nouvelles lignes par défaut?
ApproachingDarknessFish
2
Vous n'avez même pas besoin de fermer la balise html. Si vous avez besoin d'ajouter du texte à l'exécution, cela simplifie beaucoup!
Roberto
9

Vous pouvez essayer et faire ceci:

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

Les avantages de faire ceci sont:

  • Il remplace toutes les nouvelles lignes par <br/> , sans faute.
  • Il remplace automatiquement eventual <et >avec &lt;et &gt;respectivement, empêchant certains ravages de rendu.

Ce qu'il fait c'est:

  • "<html>" + ajoute une ouverture html balise d' au début
  • .replaceAll("<", "&lt;").replaceAll(">", "&gt;")s'échappe <et> pour plus de commodité
  • .replaceAll("\n", "<br/>") remplace toutes les nouvelles lignes par br balises (saut de ligne HTML) pour ce que vous vouliez
  • ... et + "</html>"ferme notre htmlétiquette à la fin.

PS: Je suis vraiment désolé de réveiller un si vieux message, mais quoi qu'il en soit, vous avez un extrait fiable pour votre Java!

TheSola10
la source
2

Tu peux faire

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

et il l'enveloppera automatiquement le cas échéant.

Nevster
la source
2

Merci Aakash d'avoir recommandé JIDE MultilineLabel. StyledLabel de JIDE a également été amélioré récemment pour prendre en charge plusieurs lignes. Je le recommanderais plutôt que le MultilineLabel car il possède de nombreuses autres fonctionnalités intéressantes. Vous pouvez consulter un article sur StyledLabel ci-dessous. Il est toujours gratuit et open source.

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

jidesoft
la source
1

JLabel est en fait capable d'afficher du HTML rudimentaire, c'est pourquoi il ne répond pas à votre utilisation du caractère de nouvelle ligne (contrairement, par exemple, à System.out).

Si vous mettez le code HTML correspondant et que vous l'utilisez <BR>, vous obtiendrez vos nouvelles lignes.

Uri
la source
soupir j'ai essayé d'ajouter des backticks pour échapper à votre html, mais il dit que je ne peux pas modifier à moins que j'ajoute au moins 6 caractères.
AnnanFay
1
@Annan Ce n'est pas nécessaire en HTML. Ce dont vous parlez, c'est de prendre en charge XHTML. stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
b1nary.atr0phy
@ b1naryatr0phy na, le problème a été résolu :) Le message d'origine avait une <br>balise littérale qui a été formatée par stack-overflow comme un saut de ligne littéral dans l'article.
AnnanFay