2009-09-04 3 views
4

JLabel 텍스트를 여러 줄로 입력해야합니다. 그렇지 않으면 텍스트가 너무 길어집니다. 우리는 어떻게 이것을 Java에서 할 수 있습니까?여러 줄로 된 JLabels - Java

답변

3

나는 JLabel의

대신 JTextArea에를 사용하는 것이 좋습니다하고 JTextArea에 당신은 단어의 끝 부분에 라인을 변경 (참) 방법 .setWrapStyleWord를 사용할 수 있습니다.

+7

JTextArea에가 ... –

11

html 태그에서 라벨 텍스트를 감싸는 데 신경 쓰지 않는다면, JLabel은 컨테이너의 너비가 너무 좁아서 모든 것을 담을 수 없을 때 자동으로 감싼다. 예를 들어, GUI에이를 추가하려고하고 너무 좁은 GUI를 크기를 조정 - 그것은 포장됩니다

new JLabel("<html>This is a really long line that I want to wrap around.</html>"); 
+0

를 표시하는 JLabel의 텍스트 편집을위한 그리고 당신은 거기뿐만 아니라에서
을 사용할 수 있습니다! – 11684

8

을 나는 JLabel의 스타일을 모방 사용자 정의 구성 요소를 만드는 것이 좋습니다 포장 상태 :

import javax.swing.JTextArea; 

public class TextNote extends JTextArea { 
    public TextNote(String text) { 
     super(text); 
     setBackground(null); 
     setEditable(false); 
     setBorder(null); 
     setLineWrap(true); 
     setWrapStyleWord(true); 
     setFocusable(false); 
    } 
} 

new TextNote("Here is multiline content."); 

것은 당신이 행의 양 (textNote.setRows(2))는 높이를 계산하는 pack()하려는 경우 설정 있는지 확인하십시오

은 그럼 그냥 전화해야 부모 구성 요소의

+1

실제 레이블의 룩앤필을 재현하기위한 두 가지 추가 사항은 다음과 같습니다. 'setOpaque (false); 'setFont (UIManager.getFont ("Label.font"));' – HughHughTeotl

1

여러 줄 레이블 높이를 조정합니다. 라벨

에서 텍스트 줄 바꿈은
private void wrapLabelText(JLabel label, String text) { 
    FontMetrics fm = label.getFontMetrics(label.getFont()); 
    PlainDocument doc = new PlainDocument(); 
    Segment segment = new Segment(); 
    try { 
     doc.insertString(0, text, null); 
    } catch (BadLocationException e) { 

    } 

    StringBuffer sb = new StringBuffer("<html>"); 
    int noOfLine = 0; 
    for (int i = 0; i < text.length();) { 
     try { 
      doc.getText(i, text.length() - i, segment); 
     } catch (BadLocationException e) { 
      throw new Error("Can't get line text"); 
     } 
     int breakpoint = Utilities.getBreakLocation(segment, fm, 0, this.width - pointerSignWidth - insets.left - insets.right, null, 0); 
     sb.append(text.substring(i, i + breakpoint)); 
     sb.append("<br/>"); 
     i += breakpoint; 

     noOfLine++; 
    } 
    sb.append("</html>"); 
    label.setText(sb.toString()); 

    labelHeight = noOfLine * fm.getHeight(); 
    setSize(); 
} 

감사합니다, Jignesh Gothadiya

관련 문제