附加到JEditorPane的超链接

时间:2015-08-03 18:31:37

标签: java swing hyperlink jeditorpane styleddocument

我有一个程序输出一些到JEditorPane的URL。我希望URL是超链接。该程序基本上将URLS输出到JEditorPane,就好像它是一个日志。

我有点工作,但它没有超链接网址。

这是我的代码:

JEditorPane editorPane = new JEditorPane();
editorPane.setEditorKit(JEditorPane.createEditorKitForContentType("text/html"));
editorPane.setEditable(false);
editorPane.addHyperlinkListener(new HyperlinkListener() {
    //listener code here
});

//some other code here

StyledDocument document = (StyledDocument) editorPane.getDocument();

String url = "http://some url";
String newUrl = "\n<a href=\""+url+"\">"+url+"</a>\n";
document.insertString(document.getLength(), "\n" + newUrl + "\n", null);

而不是http://example.com/输出:

<a href="http://example.com/">http://example.com/</a>

如果我没有使用StyledDocument而只是editorPane.setText(newUrl)它确实正确地超链接了URL,但它有一个明显的问题,即setText将替换已存在的任何内容。

1 个答案:

答案 0 :(得分:1)

使用editorPane.setText()时,该方法将使用编辑器工具包插入字符串。这意味着它将对其进行分析,对其进行样式设置,然后使用document.insertString()和适当的样式来创建预期的效果。

如果您直接致电document.insertString(),则会绕过编辑工具包 - &gt;没有造型。查看setText()的源代码,看看它是如何完成的:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/javax/swing/JEditorPane.java#JEditorPane.setText%28java.lang.String%29

由于版权问题,我无法在此处复制代码。这应该让你开始:

Document doc = editorPane.getDocument();
EditorKit kit = editorPane.getEditorKit();
StringReader r = new StringReader(newUrl);
kit.read(r, doc, doc.getLength());