JEditorPane的getCaretPosition方法仅为html控件的文本部分提供索引。是否有可能将索引放入html文本?
更具体地说,假设我有一个html文本(其中|表示插入位置)
abcd<img src="1.jpg"/>123|<img src="2.jpg"/>
现在getCaretPosition给出了8,而我需要25才能读出图像的文件名。
答案 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
值;)