public int getLineStartIndex(JTextComponent textComp, int lineNumber) {
if (lineNumber == 0) { return 0; }
// Gets the current line number start index value for
// the supplied text line.
try {
JTextArea jta = (JTextArea) textComp;
return jta.getLineStartOffset(lineNumber-1);
} catch (BadLocationException ex) { return -1; }
}
如何使用上面的方法(假设从JButton的WEBHPERFORMED事件):
int index = getLineStartIndex(jTextArea1, 3);
if (index != -1) {
jTextArea1.setCaretPosition(index);
}
jTextArea1.requestFocus();
public int getLineEndIndex(JTextComponent textComp, int lineNumber) {
if (lineNumber == 0) { return 0; }
// Gets the current line number end index value for
// the supplied text line.
try {
JTextArea jta = (JTextArea) textComp;
return jta.getLineEndOffset(lineNumber-1) - System.lineSeparator().length();
} catch (BadLocationException ex) { return -1; }
}
2条答案
按热度按时间pw9qyyiw1#
使用
JTextComponent.setCaretPosition(int)
:设置TextComponent的文本插入插入符号的位置。请注意,插入符号跟踪更改,因此如果组件的基础文本发生更改,插入符号可能会移动。如果文档是
null
,则不执行任何操作。位置必须介于0和组件文本的长度之间,否则将引发异常。erhoui1w2#
如果你想从一个实际的文本行转到另一个文本行,那么你仍然需要使用**JTextComponent.setCaretPosition()方法,但是你还需要一种方法来获取所需的行起始索引,以传递给JTextComponent.setCaretPosition()**方法。以下是如何获取任何提供的行号的起始索引,前提是提供的行号存在于文档中:
如何使用上面的方法(假设从JButton的WEBHPERFORMED事件):
上面的示例使用代码将插入符号(* 从它在文档中的任何位置 *)移动到同一文档中第3行的开头。
编辑:基于评论中的问题...
要将插入符号移动到行尾,您可以创建另一个与上面的getLineStartIndex()方法非常相似的方法,除了现在我们将其命名为getLineEndIndex(),并且我们将进行单个代码行更改:
使用方法与上面的**getLineStartIndex()**方法相同。