84 votes

faire en sorte que le texte d'un JLabel soit enveloppé en fixant une largeur maximale

J'ai un JLabel qui contient beaucoup de texte. Existe-t-il un moyen de faire en sorte que le JLabel ait une largeur maximale et que le texte soit enveloppé pour ne pas dépasser cette largeur ?

Merci

0 votes

62voto

camickr Points 137095

Non.

Vous pouvez utiliser du HTML dans l'étiquette, mais vous devez alors coder en dur la balise break.

Une meilleure approche consiste à utiliser une JTextArea et à activer l'habillage. Vous pouvez modifier l'arrière-plan, le premier plan, la police, etc. du texte pour qu'il ressemble à une étiquette.

Remarque : cette réponse est périmée depuis au moins Java 7.

Conformément à la réponse de @darren, vous devez simplement entourer la chaîne de caractères avec <html> y </html> tags :

myLabel.setText("<html>"+ myString +"</html>");

Vous n'avez pas besoin de coder en dur les balises de rupture. Le texte s'enroule lorsque le composant est redimensionné.

14 votes

Ce n'est pas tout à fait vrai. Si vous utilisez le HTML, vous peut Vous pouvez coder en dur les balises de rupture, mais si vous utilisez le HTML et que vous attribuez la taille maximale, le texte sera automatiquement enveloppé.

2 votes

Si vous décidez de coder en dur les balises de rupture, veillez à utiliser <br> et non <br />, car Java 5 n'aime pas ces dernières.

0 votes

J'aime la deuxième idée parce que la première risque de diviser un mot en deux et ce que je veux, c'est que le mot soit enveloppé.

49voto

Alexander.Berg Points 872

Oui, il existe deux façons similaires (la première avec css style="width :...px", la seconde avec html WIDTH=....... :

1.

labelText = String.format("<html><div style=\"width:%dpx;\">%s</div></html>", width, text);

2.

labelText = String.format("<html><div WIDTH=%d>%s</div></html>", width, text);

6 votes

Le fait d'utiliser le langage HTML pour que le texte s'enroule ressemble à une pirouette, mais c'est le moyen le plus simple de le faire fonctionner. Définir la taille dans la division est exactement ce dont j'avais besoin pour que l'étiquette JLabel s'enroule avec une largeur maximale sans bibliothèques tierces ou bidouillages trop compliqués.

7 votes

Que se passe-t-il si la taille de la fenêtre change ? Le texte doit être réaffiché en fonction de la nouvelle largeur de l'étiquette, mais avec cette solution, vous devriez le définir à nouveau.

1 votes

</html> btw :)

38voto

darren Points 141

Ou simplement utiliser

myLabel.setText("<html>"+ myString +"</html>");

0 votes

Avec le JDK 7, c'était suffisant, merci ! JLabel lblTitle = new JLabel("<html>My very very very long title text</html>");

4 votes

Si vous faites cela, vous devez vous assurer que toutes les entités HTML dans le fichier myString sont d'abord échappés. Si myString est quelque chose comme "Valeur < 5", il apparaîtra comme "Valeur 5".

14voto

demBones Points 59

Vous pouvez utiliser le langage HTML sans coder en dur les balises de rupture si vous utilisez plutôt des balises de paragraphe.

JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>");

0 votes

Pour une raison quelconque, cela n'a pas fonctionné pour moi. Les balises p suivent un titre, et le texte n'est pas enveloppé. Le défilement horizontal étant désactivé, cela a peut-être un rapport avec la situation.

0 votes

Vous n'avez pas besoin des balises p.

11voto

kleopatra Points 31585

JXLabel dans le Projet SwingX supporte l'emballage

JXLabel label = new JXLabel(somelongtext);
label.setLineWrap(true);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X