Domanda

Ho un JLabel che ha un sacco di testo su di esso. C'è un modo per rendere i JLabel hanno una larghezza massima in modo che possa avvolgere il testo per renderlo tale livello è inferiore questa larghezza?

Grazie

È stato utile?

Soluzione

No.

È possibile usare l'HTML nell'etichetta, ma poi è necessario difficile codificare il tag pausa.

Un approccio migliore è quello di utilizzare un JTextArea e girare avvolgimento su. È possibile cambiare lo sfondo, in primo piano, font, ecc del testo sta per farlo sembrare come un'etichetta.

Nota, questa risposta è superata da almeno Java 7.

Come per la risposta @ di Darren, è sufficiente avvolgere la stringa con <html> e </html> tag:

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

Non è necessario codificare qualsiasi tag di interruzione. Il testo avvolge come componente viene ridimensionato.

Altri suggerimenti

Sì, ci sono due modi simili (prima con stile css = "width: ... px", secondo con l'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);

o semplicemente usare

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

JXLabel nel href="http://swingx.java.net" rel="noreferrer"> progetto supporta confezionamento

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

È possibile utilizzare HTML senza codifica duro tag di interruzione se si utilizzano tag di paragrafo, invece.

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

C'è una buona tecnica di qui , scorrere fino alla fine di questo articolo.

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);

Oltre avvolgendo il testo nei tag <html>, si hanno anche per mettere l'etichetta in un contenitore che rispetta l'altezza preferita e imposta la larghezza al massimo. Ad esempio, è possibile inserire l'etichetta a nord di una BorderLayout.

Ecco un programma di lavoro semplice ma completo per illustrare questo. È possibile ridimensionare la cornice in qualsiasi modo si desidera; l'etichetta occuperà tutta la larghezza e l'altezza si regola di conseguenza per avvolgere il testo. Si noti che tutto quello che sto facendo sta usando i tag <html> e mettendo l'etichetta nel nord del 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);
            }

        });
    }

}

Se si desidera utilizzare solo JLabel di quanto si può provare questo approccio,

solo visualizzare il numero di caratteri che si desidera visualizzare in etichetta con il metodo substring.

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top