javafx - JavaFX:在 .getCaretPosition() 所在的文本区域中选择单行文本
问题描述
平台:Intellij IDEA
语言:JavaFX
我希望能够选择光标所在的一行文本。与 SQL Developer 类似,我有一个允许多行输入或查询的文本区域。在测试查询时能够将 textarea 用作查询库,这真是太好了。
使用 txtOutput.getCaretPosition(),我想获取光标所在行的当前整数索引,然后能够使用与 SQL Developer 相同的键盘快捷键(Ctrl + 输入)。如果有多行,使用 .selectForward() 或 .selectBackward() 将不起作用。
任何关于如何将文本选择限制为一行或选择文本直到特定字符(例如“;”)的任何帮助或建议都将不胜感激。
public void executeEvent(KeyEvent event) {
//int cursorLine = txtInput.getCaretPosition();
if (event.isControlDown() == true && event.getCode() == KeyCode.ENTER) {
//select line of text where integer equals cursorLine
//txtInput.selectBackward();
//txtInput.selectForward();
}
}
解决方案
只需在文本中搜索相关的定界字符(例如换行符),然后选择相关部分。唯一需要注意的是如果用户选择了最后一行,在这种情况下会有后续的换行符:
int caretPos = txtInput.getCaretPosition();
int previousNewline = txtInput.getText().lastIndexOf('\n', caretPos);
int nextNewline = txtInput.getText().indexOf('\n', caretPos);
if (nextNewline == -1) nextNewline = txtInput.getText().length();
txtInput.selectRange(previousNewLine + 1, nextNewLine);