Program Club

최대 너비를 설정하여 JLabel을 텍스트로 감싸십시오.

proclub 2020. 10. 9. 12:34
반응형

최대 너비를 설정하여 JLabel을 텍스트로 감싸십시오.


많은 텍스트가있는 JLabel이 있습니다. JLabel의 너비를 최대로 설정하여 텍스트를이 너비를 초과하지 않도록 줄 바꿈하는 방법이 있습니까?

감사


아니.

레이블에 HTML을 사용할 수 있지만 중단 태그를 하드 코딩해야합니다.

더 나은 방법은 JTextArea를 사용하고 랩핑을 켜는 것입니다. 텍스트의 배경, 전경, 글꼴 등을 변경하여 레이블처럼 보이게 할 수 있습니다.

이 답변은 Java 7 이상에서 구식입니다.

@darren의 대답에 따라 문자열을 <html></html>태그 로 감싸기 만하면됩니다 .

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

중단 태그를 하드 코딩 할 필요가 없습니다. 구성 요소의 크기가 조정되면 텍스트가 줄 바꿈됩니다.


예, 두 가지 유사한 방법이 있습니다 (첫 번째는 css style = "width : ... px", 두 번째는 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);

또는 단순히 사용

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

SwingX 프로젝트의 JXLabel 은 래핑을 지원합니다.

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

대신 단락 태그를 사용하는 경우 하드 코딩 구분 태그없이 HTML을 사용할 수 있습니다.

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

여기에 좋은 기술이 있습니다 . 기사의 끝으로 스크롤하십시오.

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

텍스트를 <html>태그로 감싸는 것 외에 선호하는 높이를 존중하고 너비를 최대로 설정하는 컨테이너에 라벨을 넣어야합니다. 예를 들어 레이블을의 NORTH에 넣을 수 있습니다 BorderLayout.

다음은이를 설명하기위한 간단하지만 완전한 작업 프로그램입니다. 원하는 방식으로 프레임 크기를 조정할 수 있습니다. 레이블은 전체 너비를 차지하고 높이는 그에 따라 텍스트를 감싸도록 조정됩니다. 내가하는 일은 모두 <html>태그를 사용 하고 레이블을 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);
            }

        });
    }

}

If you only want to use JLabel than you can try this approach,

just display the number of characters you want to display on label using substring method.

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}

참고URL : https://stackoverflow.com/questions/2420742/make-a-jlabel-wrap-its-text-by-setting-a-max-width

반응형