2014-10-17 3 views
5

JLabel의 너비를 초과하는 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"같은 텍스트를 어떻게 감쌀 수 있습니까? 텍스트를 html 태그로 묶으려고했지만 행운이 없습니다. 의견을 보내주십시오.JLabel에서 텍스트 줄 바꿈하는 방법?

+0

가능한 중복 단어가에는 공간 문자가 없을 때 솔루션을 제공하기 위해 실패합니다. 나는 jlabel의 너비를 초과하는 단어가 하나 밖에 없을 때이 경우 어떻게해야합니까? – Nadeem

답변

6

일반적인 접근 방식은 JLabel을 사용하지 않고 대신 단어 랩 및 줄 바꿈 기능이 설정된 JTextArea을 사용하는 것입니다. 그런 다음 JTextArea를 JLabel (테두리, 배경색 등)처럼 보이도록 꾸밀 수 있습니다. [DSquare의 의견에 따라 완전하게 줄 바꿈을 포함하도록 편집 됨]

또 다른 방법은 레이블에 HTML을 seen here과 같이 사용하는 것입니다. 주의 사항

  1. 당신은 HTML이 myLabel.getText() 지금 가능 로 (HTML을 포함 호출

  2. 탈출 및/또는 문자 변환 일반 텍스트로 변환/해석 할 수 있습니다 특정 문자 알아서해야 할 수도 있습니다 # 1

편집으로 인해 : 다음은 JTextArea에 접근에 대한 예는 다음과 같습니다

,363,210

enter image description here

import javax.swing.*; 

public class JLabelLongTextDemo implements Runnable 
{ 
    public static void main(String args[]) 
    { 
    SwingUtilities.invokeLater(new JLabelLongTextDemo()); 
    } 

    public void run() 
    { 
    JLabel label = new JLabel("Hello"); 

    String text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
//  String text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " + 
//      "quick brown fox jumped over the lazy dog."; 

    JTextArea textArea = new JTextArea(2, 20); 
    textArea.setText(text); 
    textArea.setWrapStyleWord(true); 
    textArea.setLineWrap(true); 
    textArea.setOpaque(false); 
    textArea.setEditable(false); 
    textArea.setFocusable(false); 
    textArea.setBackground(UIManager.getColor("Label.background")); 
    textArea.setFont(UIManager.getFont("Label.font")); 
    textArea.setBorder(UIManager.getBorder("Label.border")); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(label, BorderLayout.NORTH); 
    frame.getContentPane().add(textArea, BorderLayout.CENTER); 
    frame.setSize(100,200); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    } 
} 
+0

그는 구체적으로 단어 감싸는 행동을 원하지 않지만, 하나의 감정가 행동을 원합니다. 즉'setLineWrap (true)'하지만'setWrapStyleWord (false)'를 가진 JTextArea가 작동한다는 뜻입니다. – DSquare

+0

@ DSquare : 라인 랩에 대해 정확합니다. 그러나, 단어 길이를 더 이상 사용하지 않는 다른 모든 단어 (아마도 대부분의 경우)가 여전히 적절하게 포장되도록 단어 감싸기를 사용해야합니다. 그것이 없다면, 그들은 기대하지 않았던 (그러나 OP에서 언급되지 않은) 라벨 길이의 끝 부분과 unceremoniously 휴식 것입니다. 위의 예에서 단어 감싸기를 false로 설정하면 무슨 뜻인지 알 수 있습니다. – splungebob

+0

나는 일반적으로 단어 감싸기가 바람직하다는 데 동의하지만 그게 문제가 아니다. 단어 줄 바꾸기는 기본 문자 줄 바꿈 동작을 재정의하므로 OP에서는 특히 원하지 않습니다. 'String text = "aaa ... aaa"'(공백없이 문제의 경우)를 설정하고 코드가 문제를 어떻게 해결하는지 확인하십시오. – DSquare

관련 문제