如何实现在JTextPane中将URL作为超链接插入的DocumentFilter?

时间:2012-10-28 19:34:49

标签: java swing url jtextpane documentfilter

我有JTable使用JTextPane作为编辑器和渲染器。我在编辑器中添加了一个keyListener,用于侦听“space”字符并检查最后一个字是否为URL,如果是,则使用以下属性将其作为超链接添加到编辑器中:attrs.addAttribute(HTML.Attribute.HREF, url);。我很快就认为,当我粘贴文本时,这不会将URL转换为超链接,因此我决定使用DocumentFilter来完成此操作。

如何创建DocumentFilter来检查要插入/替换的文本是否包含URL,以及是否插入/替换了具有HTML.Attribute.HREF属性和其他文本的URL是吗?

2 个答案:

答案 0 :(得分:1)

参见示例http://java-sl.com/tip_autocreate_links.html 没有必要使用DocumentFilter。 LIstener就足够了。

只需使用虚拟属性标记插入的内容,然后将其替换为超链接html。

答案 1 :(得分:-1)

// somewhere add text reformated as html link
setText("<HTML>Click the <FONT color=\"#000099\"><U>link</U></FONT>"
        + " to go to the Java website.</HTML>");

// somewhere add a listener for clicks
addActionListener(new OpenUrlAction());

// Define uri and open action
 final URI uri = new URI("http://java.sun.com");
    class OpenUrlAction implements ActionListener {
      @Override public void actionPerformed(ActionEvent e) {
        open(uri);
      }
    }

// Define open uri method
private static void open(URI uri) {
    if (Desktop.isDesktopSupported()) {
      try {
        Desktop.getDesktop().browse(uri);
      } catch (IOException e) { /* TODO: error handling */ }
    } else { /* TODO: error handling */ }