J'ai trouvé que cette solution est la plus simple et qu'elle fonctionne aussi correctement avec le redimensionnement. En plus d'envelopper le texte dans <html>
vous devez également placer l'étiquette dans un conteneur qui respecte la hauteur préférée et fixe la largeur au maximum. Par exemple, vous pouvez placer l'étiquette dans le NORD d'une balise BorderLayout
.
Voici un programme de travail simple mais complet pour illustrer cela. Vous pouvez redimensionner le cadre comme vous le souhaitez ; l'étiquette occupera toute la largeur et la hauteur s'ajustera en conséquence pour envelopper le texte. Remarquez que tout ce que je fais est d'utiliser <html>
et en plaçant l'étiquette dans le NORD de la balise BorderLayout
.
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Dimension;
public class LabelWrap {
public static JPanel createPanel() {
JLabel label = new JLabel();
label.setText("<html>"
+ "<h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h3>"
+ "<p>Duis a tincidunt urna. Phasellus tristique interdum mauris, "
+ "ut vestibulum purus suscipit eget. Aenean massa elit, accumsan "
+ "non faucibus vel, dictum placerat urna. In bibendum est sagittis "
+ "urna iaculis quis sagittis velit commodo. Cum sociis natoque "
+ "penatibus et magnis dis parturient montes, nascetur ridiculus "
+ "mus. Nam quis lacus mauris. Phasellus sem libero, convallis "
+ "mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper "
+ "adipiscing. In ac neque quis elit suscipit pharetra. Nulla at "
+ "orci a tortor consequat consequat vitae sit amet elit. Praesent "
+ "commodo lacus a magna mattis vehicula. Curabitur a hendrerit "
+ "risus. Aliquam accumsan lorem quis orci lobortis malesuada.</p>"
+ "<p>Proin quis viverra ligula. Donec pulvinar, dui id facilisis "
+ "vulputate, purus justo laoreet augue, a feugiat sapien dolor ut "
+ "nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit. "
+ "Praesent et mauris non tellus gravida mollis. In hac habitasse "
+ "platea dictumst. Vestibulum ante ipsum primis in faucibus orci "
+ "luctus et ultrices posuere cubilia Curae; Vestibulum mattis, "
+ "tortor sed scelerisque laoreet, tellus neque consectetur lacus, "
+ "eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum "
+ "interdum gravida, elit velit malesuada arcu, nec aliquam lectus "
+ "velit ut turpis. Praesent pretium magna in nibh hendrerit et "
+ "elementum tellus viverra. Praesent eu ante diam. Proin risus "
+ "eros, dapibus at eleifend sit amet, blandit eget purus. "
+ "Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor "
+ "congue.</p>"
+ "</html>");
JPanel panel = new JPanel(new BorderLayout());
panel.add(label, BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(640, 480));
return panel;
}
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(createPanel());
frame.pack();
frame.setVisible(true);
}
});
}
}
4 votes
Juste pour info, la réponse d'Andrew est la meilleure.
0 votes
@HovercraftFullOfEels <VBG>Je savais que les captures d'écran feraient la différence!</VBG>
1 votes
Oui, je dois commencer à le faire un peu plus, mais ça aide quand même d'avoir la bonne réponse. Je suppose que je devrais apprendre un peu de HTML et de styles...
0 votes
@AndrewThompson Ils sont plutôt cool, mais ils vous font répondre plus lentement ! :)
2 votes
@HovercraftFullOfEels +1 pour la 2eme phrase, et pas seulement vous, mais aussi tout développeur côté serveur utilisant tout la langue. Je suis stupéfait de voir à quel point les développeurs de servlets (par exemple) comprennent peu le HTML que leurs applications produisent. Quant au premier point, certains pourraient considérer mon ajout incessant d'images comme du "bruit" visuel.
0 votes
@MarianP Vrai, donc j'utilise une astuce. Je poste la source en premier, puis j'ajoute les images dans une édition. Bien sûr, cela n'a pas aidé ici, car il m'a fallu plus de temps pour écrire la source (très courte) que pour 2 réponses et une coche ;)