我相信JEditorPane
。我需要简单的编辑器。我已经解决了加载和修改包含自定义(两个)标签的 HTML 的问题(请参阅我的旧帖子)。它可以正确显示文档,我现在什至可以编辑它。我可以编写文本、删除字符或我的自定义元素。我赢得了一场战斗,但还没有赢得这场战争。遗憾的是,下一步也是非常成问题的。我无法插入我的自定义标签。
我有一个自定义操作:
import my.own.HTMLEditorKit; //extends standard HTMLEditorKit
import my.own.HTMLDocument; //extends standard HTMLDocument
class InsertElementAction extends StyledTextAction {
private static final long serialVersionUID = 1L;
public InsertElementAction(String actionName) {
super(actionName);
}
@Override
public void actionPerformed(ActionEvent e) {
JEditorPane editor = getEditor(e);
if (editor == null)
return;
HTMLDocument doc = (HTMLDocument) editor.getDocument();
HTMLEditorKit ekit = (HTMLEditorKit) editor.getEditorKit();
int offset = editor.getSelectionStart();
try {
ekit.insertHTML(doc, offset, "<span>ahoj</span>", 0, 0, HTML.Tag.SPAN);
Element ele = doc.getRootElements()[0];
ele = ele.getElement(1).getElement(0);
doc.setInnerHTML(ele, "<bar medium=\"#DEFAULT\" type=\"packaged\" source=\"identifier\" />");
}
catch (BadLocationException ble) {
throw new Error(ble);
}
catch (IOException ioe) {
throw new Error(ioe);
}
}
}
它工作正常。我可以插入span
元素。但我不能以这种方式插入非标准标签。我可以只插入code
,span
等等,但不能插入我的标签。对于我的标签,我不得不使用这个:
ekit.insertHTML(doc, offset, "x<bar medium=\"#DEFAULT\" type=\"packaged\" source=\"identifier\" />x", 0, 0, null);
有两个关键问题
- 自定义标签必须以非空白字符(此处为 x)为界
- 当前元素的主体被拆分
当我将span
元素插入<p>paragraph</p>
时,我得到<p>par<span>ahoj</span>agraph</p>
了预期。然而,未知标签总是作为元素的子body
元素插入,结果(例如未知标签x
)是<p>par</p><x>ahoj</x><p>agraph</p>
.
这项工作令人筋疲力尽。几周以来,我一直坚信这个相对简单的任务。我已经浪费了。如果插入不起作用,我可以将其全部废弃...