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
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
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é.
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é.
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.
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é.
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.
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.
Avec le JDK 7, c'était suffisant, merci ! JLabel lblTitle = new JLabel("<html>My very very very long title text</html>");
JXLabel dans le Projet SwingX supporte l'emballage
JXLabel label = new JXLabel(somelongtext);
label.setLineWrap(true);
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.
0 votes
Voir aussi stackoverflow.com/questions/1627048/