Question

J'ai un JLabel qui a beaucoup de texte là-dessus. Y at-il un moyen de rendre les JLabel ont une largeur maximum pour qu'il envelopper le texte pour le rendre ne dépasse pas cette largeur?

Merci

Était-ce utile?

La solution

Non.

Vous pouvez utiliser HTML dans l'étiquette, mais alors vous devez coder en dur la balise de rupture.

Une meilleure approche consiste à utiliser un JTextArea et tourner sur l'emballage. Vous pouvez changer l'arrière-plan, au premier plan, la police, etc. du texte sont à la faire ressembler à une étiquette.

Remarque, cette réponse est obsolète que d'au moins Java 7.

Selon la réponse de @ darren, il vous suffit d'envelopper la chaîne avec des balises <html> et </html>:

myLabel.setText("<html>"+ myString +"</html>");

Vous n'avez pas besoin de coder en dur des balises de rupture. Le texte enveloppe comme composant redimensionne.

Autres conseils

Oui, il y a deux façons similaires (d'abord avec style = css "width: ... px", deuxième avec html WIDTH = .......:

1.

labelText = String.format("<html><div style=\"width:%dpx;\">%s</div></html>", width, text);

2.

labelText = String.format("<html><div WIDTH=%d>%s</div></html>", width, text);

ou utilisez simplement

myLabel.setText("<html>"+ myString +"</html>");

JXLabel dans le projet SwingX supports d'emballage

JXLabel label = new JXLabel(somelongtext);
label.setLineWrap(true);  

Vous pouvez utiliser HTML sans coder en dur balises break si vous utilisez des balises de paragraphe à la place.

JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>");

Il y a une bonne technique , faites défiler jusqu'à la fin de l'article.

JLabel labelBeingUsed = myLabel;
View view = (View) labelBeingUsed.getClientProperty(BasicHTML.propertyKey);
view.setSize(scrollPane1.getWidth(), 0.0f);
float w = view.getPreferredSpan(View.X_AXIS);
float h = view.getPreferredSpan(View.Y_AXIS);
labelBeingUsed.setSize((int) w, (int) h);

Autre que enroulant le texte dans les balises <html>, vous devez également mettre l'étiquette dans un récipient qui respecte la hauteur préférée et fixe la largeur au maximum. Par exemple, vous pouvez mettre l'étiquette au nord d'un BorderLayout.

Voici un programme de travail simple mais complet pour illustrer cela. Vous pouvez redimensionner le cadre de quelque façon que vous voulez; l'étiquette occupera toute la largeur et la hauteur sera ajuster en conséquence pour envelopper le texte. Notez que tout ce que je fais utilise des balises <html> et de mettre l'étiquette dans le nord du 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);
            }

        });
    }

}

Si vous voulez seulement utiliser JLabel que vous pouvez essayer cette approche,

afficher uniquement le nombre de caractères que vous souhaitez afficher sur l'étiquette en utilisant la méthode de sous-chaîne.

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top