- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在编写一个使用 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 文档中的元素?
最佳答案
HTMLEditorKit 仅支持 HTML 3.2,因此您可能会遇到几个问题。如果您的目标是版本 3.2 之后的 HTML 标记,那么 JavaFX 会更好地为您服务 HTMLEditor .如果您不想使用 JavaFX,则可以使用 Swing 的替代实现,例如 SHEF .如果您想要从头开始的一些完整示例,请尝试 O'Reilly HTML Editor Kits book (古老但有启发性)。
来自HTMLEditorKit文档:
The default support is provided by this class, which supports HTML version 3.2 (with some extensions), and is migrating toward version 4.0.
可以根据 XML 模式验证的最早版本的 HTML 是 XHTML 1.0,因此使用 HTMLEditorKit 查找所有异常情况将是一个挑战。你可能会幸运地整合 JTidy .
关于Java JEditorPane 用超链接替换选中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30915636/
我是一名优秀的程序员,十分优秀!