Java JEditorPane用超链接替换所选文本

时间:2015-06-18 12:41:28

标签: java html swing hyperlink jeditorpane

我正在编写一个使用JEditorPane制作简单编辑器的程序,它使用超链接允许用户使用简单的超链接侦听器在不同页面之间跳转。

问题是我希望能够让用户选择一些文本并将其转换为链接。我发现很多例子在右键单击时使用鼠标的位置来选择HTMLDocument中的元素,但我也希望它可以通过键盘快捷键来实现。

通过搜索和实验,我提出了方法:

public void createLink() {
    HTMLEditorKit kit = new HTMLEditorKit();
    try {
        String text = jEditorPane1.getSelectedText();
        jEditorPane1.replaceSelection("");
        kit.insertHTML((HTMLDocument) jEditorPane1.getDocument(),
                       jEditorPane1.getCaretPosition(), 
                       "<a href=\"" + text + "\">" + text + "</a>", 
                       0, 0, HTML.Tag.A);
    } catch (BadLocationException | IOException ex) {
        Logger.getLogger(Editor.class.getName()).log(Level.SEVERE, null, ex);
    }
}

但有些事情看起来很丑陋,我不知道哪些角落案例会导致诸如尝试在链接中放置链接或重叠链接等问题。是否有更明智的解决方案将所选文本映射到html文档中的元素?

1 个答案:

答案 0 :(得分:1)

HTMLEditorKit仅支持HTML 3.2,因此您可能会遇到几个问题。如果您的目标是HTML 3.2以上的HTML代码,那么JavaFX HTMLEditor将为您提供更好的服务。如果您不想使用JavaFX,那么还有其他Swing实现,例如SHEF。如果您想从头开始学习一些完整的示例,请尝试O'Reilly HTML Editor Kits book(旧的但有教育意义的)。

来自HTMLEditorKit文档:

  

默认支持由此类提供,该类支持HTML 3.2版(带有一些扩展),并且正在向4.0版迁移。

可以针对XML模式验证的最早版本的HTML是XHTML 1.0,因此找到所有异常情况将是HTMLEditorKit的挑战。您可能会运气JTidy