我正在开发一个程序,其中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"是纯文本形式(没有样式)。那我在这里错过了什么?任何帮助将不胜感激!
答案 0 :(得分:2)
您不需要使用scrollRectToVisible或grabFocus方法。使用setCaretPosition()方法时,文本窗格应自动滚动。有关详细信息,请参阅Text Area Scrolling。
如果您仍然遇到此方法的问题,请发布一个显示问题的正确SSCCE。
也许来自Text Utilities的centerLineInScrollPane(...)
方法更适合滚动,因为文字将位于中心而不是底部。