将插入位置放入JEditorPane的html中

时间:2012-01-14 23:46:50

标签: java image swing caret jeditorpane

JEditorPane的getCaretPosition方法仅为html控件的文本部分提供索引。是否有可能将索引放入html文本?

更具体地说,假设我有一个html文本(其中|表示插入位置)

abcd<img src="1.jpg"/>123|<img src="2.jpg"/>

现在getCaretPosition给出了8,而我需要25才能读出图像的文件名。

4 个答案:

答案 0 :(得分:1)

我认为您不能将您的插入符转换为能够将标记计为字符。如果你的最终目标是阅读图像文件名,你应该使用:

HTMLEditorKit (JEditorPane.getEditorKitForContentType("text/html") );

有关利用率的详细信息,请参阅Oracle HTMLEditorKit documentation和此O'Reilly PDF,其中包含有趣的示例。

答案 1 :(得分:1)

JEditorPane的基础模型(StyledDocument的某个子类,在您的情况下为HTMLDocument)实际上并不将HTML文本作为其内部表示。相反,它有一个包含样式属性的Elements树。只有在通过HTMLWriter运行树时,它才会成为HTML。这使得你想要做的事情有点棘手!我可以想象在你当前所在的角色元素上放置一些flag属性,然后使用特制的HTMLWriter子类来写出直到该标记并计算角色,但这听起来像是一个史诗般的黑客。可能有一种更简单的方法来获得你想要的东西,虽然它对我来说有点不清楚实际上是什么。

答案 2 :(得分:1)

我遇到了同样的问题,并使用以下代码解决了这个问题:

editor.getDocument().insertString(editor.getCaretPosition(),"String to insert", null);

答案 3 :(得分:0)

我遇到了大致相同的问题并使用以下方法解决了问题(我使用了JTextPane,但JEditorPane}应该是相同的:

public int getCaretPositionHTML(JTextPane pane) {
    HTMLDocument document = (HTMLDocument) pane.getDocument();
    String text = pane.getText();
    String x;
    Random RNG = new Random();
    while (true) {
        x = RNG.nextLong() + "";
        if (text.indexOf(x) < 0) break;
    }
    try {
        document.insertString(pane.getCaretPosition(), x, null);
    } catch (BadLocationException ex) {
        ex.printStackTrace();
        return -1;
    }
    text = pane.getText();
    int i = text.indexOf(x);
    pane.setText(text.replace(x, ""));
    return i;
}

它假设您的JTextPane不包含所有可能的Long值;)