[Java] JLabel wrap

Résolu
zzzer Messages postés 906 Date d'inscription   Statut Membre Dernière intervention   -  
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aimerais réaliser un JScrollPane avec un JLabel dont le texte retourne à la ligne en fin de ligne, mais j'ai quelques problèmes.
J'ai essayé un
JLabel jl = new JLabel("<html>Mon texte qui devrait retourner à la ligne à la fin de chaque mot mais qui, finalement, ne fonctionne pas</html>");
JScrollPane jsp = new JScrollPane(jl, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER););
myFrame.add(jsp);
Mais rien à faire, le texte de mon JLabel ne revient pas à la ligne...

Quelqu'un aurait une solution ?

Merci d'avance !

A voir également:

3 réponses

sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Salut, toi :-)

Est-ce que tu peux te permettre d'insérer des <br> ponctuels? C'est ce que je fais, je n'ai pas réussi moi non plus à avoir un retour auto à la ligne...

(I) Je n'ai pas testé à limiter les dimensions des JLabel (via max / preferred size), têtre comme ça...

++
0
zzzer Messages postés 906 Date d'inscription   Statut Membre Dernière intervention   181
 
Non, je peux pas vraiment me permettre d'ajouter des <br> à la fin de chaque ligne, la taille de la fenêtre étant calculée par rapport à la résolution de l'écran...
Et j'ai essayé avec le setSize(), mais rien à faire...

0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Quel est l'effet d'un max size défini ? La JLabel ne respecte pas la dimension ou bien tronque le texte?
0
zzzer Messages postés 906 Date d'inscription   Statut Membre Dernière intervention   181
 
Ca ne respecte pas la dimension, le JLabel s'étend jusqu'à la fin de la phrase, même si ça dépasse la fenêtre.
Mais je viens de trouver une fonction en or :
private void wrapLabelText(JLabel label, String text) {
	FontMetrics fm = label.getFontMetrics(label.getFont());
	Container container = label.getParent();
	int containerWidth = container.getWidth();
 
	BreakIterator boundary = BreakIterator.getWordInstance();
	boundary.setText(text);
 
	StringBuffer trial = new StringBuffer();
	StringBuffer real = new StringBuffer("<html>");
 
	int start = boundary.first();
	for (int end = boundary.next(); end != BreakIterator.DONE;
		start = end, end = boundary.next()) {
		String word = text.substring(start,end);
		trial.append(word);
		int trialWidth = SwingUtilities.computeStringWidth(fm,
			trial.toString());
		if (trialWidth > containerWidth) {
			trial = new StringBuffer(word);
			real.append("<br>");
		}
		real.append(word);
	}
 
	real.append("</html>");
 
	label.setText(real.toString());
}

Source: https://www.geekyramblings.net

Ca marche nickel, merci à lui !

0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
mici à toi aussi :=)
0