Duplicata possible:
texte multiligne dans JLabel
Je veux faire ça:
JLabel myLabel = new JLabel();
myLabel.setText("This is\na multi-line string");
Actuellement, cela se traduit par une étiquette qui affiche
This isa multi-line string
Je veux qu'il fasse cela à la place:
This is
a multi-line string
Aucune suggestion?
Merci
EDIT: Solution implémentée
Dans le corps de la méthode:
myLabel.setText(convertToMultiline("This is\na multi-line string"));
Méthode d'assistance:
public static String convertToMultiline(String orig)
{
return "<html>" + orig.replaceAll("\n", "<br>");
}
Vous pouvez utiliser HTML
dans JLabels
. Pour l'utiliser, votre texte doit commencer par <html>
.
Définissez votre texte sur "<html>This is<br>a multi-line string"
et ça devrait marcher.
Voir Swing Tutorial: JLabel and Multiline label (HTML) pour plus d'informations.
public class JMultilineLabel extends JTextArea{
private static final long serialVersionUID = 1L;
public JMultilineLabel(String text){
super(text);
setEditable(false);
setCursor(null);
setOpaque(false);
setFocusable(false);
setFont(UIManager.getFont("Label.font"));
setWrapStyleWord(true);
setLineWrap(true);
//According to Mariana this might improve it
setBorder(new EmptyBorder(5, 5, 5, 5));
setAlignmentY(JLabel.CENTER_ALIGNMENT);
}
}
Ça me ressemble totalement, mais c'est moche
Un autre moyen simple (mais modifie un peu le style de texte) consiste à utiliser un <pre></pre>
bloc html.
Cela conservera toute mise en forme entrée par l'utilisateur si la chaîne que vous utilisez provient d'une zone de saisie utilisateur.
Exemple:
JLabel label = new JLabel("<html><pre>First Line\nSecond Line</pre></html>");
Le problème avec l'utilisation de html dans JLabel
ou tout autre composant Swing est que vous devez ensuite le styliser en html, pas avec l'habituel setFont
, setForeground
, etc. Si vous ' re ok avec ça, très bien.
Sinon, vous pouvez utiliser quelque chose comme MultilineLabel de JIDE, qui étend JTextArea
. Cela fait partie de leur open source Commom Layer .
La procédure directe d'écriture d'un texte multiligne dans un jlabel est:
JLabel label = new JLabel("<html>First Line<br>Second Line</html>");
JLabel peut accepter du code html. Vous pouvez peut-être essayer d'utiliser le <br>
tag.
Exemple:
JLabel myLabel = new JLabel();
myLabel.setText("<html> This is a <br> multi-line string </html>");