Pergunta

Eu tenho um JLabel que tem um monte de texto sobre ele. Existe uma maneira de fazer o JLabel ter uma largura máxima para que ele irá quebrar o texto para fazer não-lo exceder essa largura?

Graças

Foi útil?

Solução

No.

Você pode usar HTML no rótulo, mas, em seguida, você deve codificar o tag pausa.

Uma abordagem melhor é usar um JTextArea e virar embrulho diante. Você pode mudar o fundo, primeiro plano, fonte etc. do texto são para torná-lo parecido com um rótulo.

Nota, esta resposta está desatualizado a partir de pelo menos Java 7.

De acordo com @ resposta de Darren, você simplesmente precisa para embrulhar a corda com <html> e </html> tags:

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

Você não precisa codificar todas as tags de quebra. Os envoltórios de texto como os redimensiona componentes.

Outras dicas

Sim, existem duas maneiras semelhantes (primeira com estilo css = "width: ... px", segundo com 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 simplesmente usar

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

JXLabel em suportes do projeto SwingX embrulho

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

Você pode usar HTML sem codificação duro etiquetas de quebrar se você usar tags de parágrafo em seu lugar.

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

Há uma técnica boa aqui , vá até o final do artigo.

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

Além de envolver o texto em tags <html>, você também tem que colocar a etiqueta em um recipiente que respeite a altura preferida e define a largura para o máximo. Por exemplo, você pode colocar o rótulo para o norte de uma BorderLayout.

Aqui está um programa de trabalho simples, mas completo para ilustrar isso. Você pode redimensionar o quadro em qualquer maneira que você quer; o rótulo vai ocupar toda a largura ea altura vai ajustar em conformidade para quebrar o texto. Observe que tudo o que eu estou fazendo é usando tags <html> e colocar a etiqueta no norte da 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 você só quer usar JLabel do que você pode tentar essa abordagem,

apenas exibir o número de caracteres que você deseja exibir no rótulo usando o método substring.

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top