2011-05-13 4 views
0

JLabels를 하이퍼 링크로 사용하고 있습니다. 나는 그들이 브라우저의 링크와 똑같이 보이고 기능하기를 바란다. 그래서 텍스트 창/편집기 창 등을 사용하는 것은 바람직하지 않다. 문제는 이러한 링크가 배치 될 컨테이너의 대부분이 지정된 크기가 없다는 것입니다. 즉 부모 (또는 부모님)의 크기에 의존합니다. Boxes를 레이아웃 용으로 사용하고, 링크 텍스트가 상자 너비의 약 2/3 이상을 차지하는 경우 상자 내용이 상자의 실제 경계 밖으로 늘어납니다 (상자가 JScrollPane으로 둘러싸인 경우 , 수평 스크롤 바가 나타납니다).선호/최대/최소 크기가없는 텍스트 래핑 JLabels

JLabel에서 줄 바꿈을 적용 할 수있는 방법이 있습니까? 필자가 읽은 많은 게시물은 HTML 태그의 텍스트를 puttng하면 필요시 자동으로 줄 바꿈됩니다.하지만 내가 무엇을해도이 작업을 수행 할 수는 없습니다. (- 즉

if(text.length() > wrapLength) 
{ 
    //break the text into substrings and insert a <br /> at wrapLength 
    //the difficulty is in figuring out the value of wrapLength 
} 

이 자동화 될 수없는 한)

어떤 아이디어가 크게 감사하겠습니다을 나는 그들이 갈 것입니다 정확히 모르기 때문에 나는
태그를 사용할 수 없습니다. 하이퍼 링크 클래스에 대한 코드는 아래와 같습니다.

라벨에
import java.awt.Color; 
import java.awt.Desktop; 
import java.awt.Font; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 
import javax.swing.JLabel; 

public class Hyperlink extends JLabel 
{ 
    private URI uri; 
    private String baseText; 

    public Hyperlink(String text, String uri, Font font, Color textColor) 
    { 
     super(text); 
     baseText = text; 
     setFont(font); 
     setForeground(textColor); 
     setOpaque(false); 

     if(Desktop.isDesktopSupported()) 
     { 
      try 
      { 
       setToolTipText(uri); 
       this.uri = new URI(uri); 
       addMouseListener(new LinkMouseListener()); 
      } 
      catch(URISyntaxException ex) 
      { 
      } 
     } 
    } 

    private class LinkMouseListener extends MouseAdapter 
    { 
     @Override 
     public void mouseClicked(MouseEvent e) 
     { 
      Desktop desktop = Desktop.getDesktop(); 
      try 
      { 
       desktop.browse(uri); 
      } 
      catch(IOException ioe) 
      { 
       System.out.println("Something went wrong..."); //DELETE 
      } 
     } 

     @Override 
     public void mouseEntered(MouseEvent e) 
     { 
      setText("<html><u>" + baseText + "</u></html>"); 
     } 

     @Override 
     public void mouseExited(MouseEvent e) 
     { 
      setText(baseText); 
     } 
    } 
} 

답변

2

시도 setPreferredSize(new Dimension(width, height)), setSize(new Dimension(width, height)) 또는 setMaximumSize(new Dimension(width, height)) 당신이 그것을 줄 바꿈 할 폭 폭을 설정합니다. 귀하의 경우 그것은 최대 크기 (...)로 설정됩니다 생각합니다.

레이아웃 관리자 때문에 자동으로 줄 바꿈되지 않습니다. 일부 레이아웃 관리자는 기본 크기 나 다른 크기를 무시합니다. 귀하의 경우에는 아마도 다른 setXXXSize() 메소드로 놀고 레이아웃 관리자가 존중하는 메소드를 찾아야합니다.

원하는 너비를 얻으려면 부모 중 한 사람에게서 너비를 가져와야합니다. 다시 한번, 레이아웃 관리자에 따라 선호하는 너비, 최대 너비 또는 getSize(). getWidth()를 얻어야 할 수도 있습니다. 레이아웃에 대해 더 많이 알지 못하면 정확히 어떻게해야 할지를 말하기는 어렵지만 라벨을 감쌀 수 있도록 라벨에 어떤 종류의 너비를 설정해야합니다.

내가 생각할 수있는 유일한 다른 옵션은 레이블의 기본 너비를 임의의 사용 가능한 공간에 맞춰야하는 임의의 것으로 설정하는 것입니다.

1

JTextArea를 사용하십시오. 텍스트는 자동으로 줄 바꿈되도록 설정할 수 있습니다. 텍스트 영역 특성으로 재생하면 레이블처럼 보이게 할 수 있습니다.

사용자 정의 형광펜을 사용하여 텍스트에 "밑줄"을 달 수 있습니다. 그런 다음 필요에 따라 형광펜을 추가/제거하면됩니다. Rectangle Painter을 통해 시작할 수 있습니다.

관련 문제