我与JEditorPane
相信。我需要简单的编辑器。我已经解决了加载和修改包含自定义(两个)标签的HTML的问题(请参阅my older post)。它正确显示文档,我现在甚至可以编辑它。我可以写文字,删除字符或我的自定义元素。我赢得了一场战斗,但还没有赢得战争。令人遗憾的是,下一步也是非常有问题的。我无法插入自定义标签。JEditorPane,HTMLEditorKit - 自定义动作插入自定义标记
我有一个自定义操作:
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);
}
}
}
它workts正常。我可以插入span
元素。但是我不能用这种方式插入非标准标签。我只能插入code
,span
等,但不能插入我的标签。对于我的标签我被迫使用:
ekit.insertHTML(doc, offset, "x<bar medium=\"#DEFAULT\" type=\"packaged\" source=\"identifier\" />x", 0, 0, null);
有两个关键问题
- 自定义标签必须与非whispace字符(在此,x)
- 来界定当前元素的当我插入
span
元素为<p>paragraph</p>
体拆分
,我得到<p>par<span>ahoj</span>agraph</p>
预期。如何将未知标签全部插入body
元素的子元素中,结果(例如未知标签x
)为<p>par</p><x>ahoj</x><p>agraph</p>
。
这项工作让人筋疲力尽。自从几周以来,我就相信这个相对简单的任务。我已经浪费了。如果插入不上班,我就废了...所有
什么对象类型是'AppErrors.EDITORKIT_ACTIONFAILURE'?如果'String',为什么不抛出新的Throwable(AppErrors.EDITORKIT_ACTIONFAILURE,ioe);'? –
没关系。我已将帖子更新为更全面。 –
我不确定我是否理解。 HTMLEditorKit用于呈现HTML。如果您使用非HTML标记提供它,您希望它做什么? –