web-dev-qa-db-fra.com

Java swing: étiquettes multilignes?

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>");
}
50
bguiz

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.

62
Peter Lang
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

13
Whimusical

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>"); 
6
Austyn Mahoney

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 .

5
Geoffrey Zheng

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>"); 
5
Marco Schmid

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>");
3
KWAN TOH CHOONG
3
Viachaslau Kamkou