2011-04-18 87 views

回答

1

我们一直在使用这样的事情:

public class UrlTextPane extends JTextPane { 

private final Pattern urlPattern = Pattern.compile(UrlUtil.URL_REGEX); 

public UrlTextPane() { 
    this.setEditable(false); 
    this.addHyperlinkListener(new UrlHyperlinkListener()); 
    this.setContentType("text/html"); 
} 

private class UrlHyperlinkListener implements HyperlinkListener { 
    @Override 
    public void hyperlinkUpdate(final HyperlinkEvent event) { 
     if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { 
      try { 
       Desktop.getDesktop().browse(event.getURL().toURI()); 
      } catch (final IOException e) { 
       throw new RuntimeException("Can't open URL", e); 
      } catch (final URISyntaxException e) { 
       throw new RuntimeException("Can't open URL", e); 
      } 
     } 
    } 
}; 

@Override 
/** 
* Set the text, first translate it into HTML: 
*/ 
public void setText(final String input) { 

    final StringBuilder answer = new StringBuilder(); 
    answer.append("<html><body style=\"font-size: 8.5px;font-family: Tahoma, sans-serif\">"); 

    final String content = StringEscapeUtils.escapeHtml(input); 

    int lastIndex = 0; 
    final Matcher matcher = urlPattern.matcher(content); 
    while(matcher.find()) { 
     //Append everything since last update to the url: 
     answer.append(content.substring(lastIndex, matcher.start())); 
     final String url = content.substring(matcher.start(), matcher.end()).trim(); 
     if(UrlUtil.isValidURI(url)) { 
      answer.append("<a href=\"" + url + "\">"+url+"</a>"); 
     } else { 
      answer.append(url); 
     } 
     lastIndex = matcher.end(); 
    } 
    //Append end: 
    answer.append(content.substring(lastIndex)); 
    answer.append("</body></html>"); 
    super.setText(answer.toString().replace("\n", "<br />")); 
} 

}

+0

UrlUtil包含一个URL正则表达式和一个方法,试图解析URL到一个Java URI(这是非常严格的)。 – 2011-04-18 13:35:34

0

是可能的,

使用HTML

Add one JLabel use HTML as text并把它添加到面板

+0

@ Jigar乔希的JPanel可以阅读? – 2011-04-18 13:32:47

+0

我说,添加一个标签,并将其文本设置为HTML,然后将其添加到面板 – 2011-04-18 13:36:42

+0

@ Jigar Joshi但我无法点击它。我该如何做? – 2011-04-18 14:47:57

0

我写了一个简单的函数,它的文本,链接,你要显示的位置,并返回一个JLabel。当鼠标悬停在文本上时,它会变成蓝色并带有下划线,并使光标成为指针,否则它会变黑,并且不带下划线和默认光标。

public static JLabel makeHyperLink(final String s, final String link, int x, int y) 
{ 
    final JLabel l = new JLabel(s); 
    l.addMouseListener(new MouseAdapter() 
    { 

     @Override 
     public void mouseExited(MouseEvent arg0) 
     { 
      l.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 
      l.setText(s); 
     } 

     @Override 
     public void mouseEntered(MouseEvent arg0) 
     { 
      l.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
      l.setText(String.format("<HTML><FONT color = \"#000099\"><U>%s</U></FONT></HTML>", s)); 
     } 

     @Override 
     public void mouseClicked(MouseEvent arg0) 
     { 
      try 
      { 
       URI uri = new URI(link); 
       if (Desktop.isDesktopSupported()) 
        Desktop.getDesktop().browse(uri); 
      } catch (Exception e) 
      { 
      } 
     } 
    }); 

    l.setBounds(x, y, s.length()*5, 20); 
    l.setToolTipText(String.format("go to %s", link)); 
    return l; 
} 

如果代码的任何一部分不明确,联系我;)