Java - 向下滚动到JTextPane中的特定行

时间:2014-08-02 08:49:18

标签: java swing anchor jtextpane caret

我正在开发一个程序,其中JTextPane包含一个用户可以编辑的大文档,并且该文档有链接,以便一个人可以跳转到文档的不同部分(基本上我正在尝试HTML的JTextPane版本[a href =" #link"]代码)。现在,代码非常有效,在用户选择链接时正确地将插入符号移动到正确的行。但是,无论我做什么,最后一个链接总是抛出一个IllegalArguementException,说我的位置不好-1。我无法弄清楚为什么一直这么说。

这是我的代码:

//JTextPane editor is instantiated above.

//searchTerm is the string that we are linking to in the text.
//I want the caret to move to where this text is in the JTextPane.

try
{
    int textPosition = text.indexOf(searchTerm);
    editor.setCaretPosition(textPosition);
    Rectangle bottom = editor.modelToView(textPosition);
    editor.scrollRectToVisible(bottom);
    editor.grabFocus();
}
catch (BadLocationException | IOException ex) {
    System.err.println("Could not scroll to " + ex);
    ex.printStackTrace();
}           

我已经检查过" text"是纯文本形式(没有样式)。那我在这里错过了什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您不需要使用scrollRectToVisible或grabFocus方法。使用setCaretPosition()方法时,文本窗格应自动滚动。有关详细信息,请参阅Text Area Scrolling

如果您仍然遇到此方法的问题,请发布一个显示问题的正确SSCCE

也许来自Text UtilitiescenterLineInScrollPane(...)方法更适合滚动,因为文字将位于中心而不是底部。