JavaFX:在.getCaretPosition()所在的文本区域中选择一行文本



平台:Intellij IDEA

语言:JavaFX

我希望能够选择光标所在的文本行。与SQLDeveloper类似,我有一个允许多行输入或查询的文本区域。在测试查询时,能够将文本区域用作查询库是件好事。

使用txtOutput.getCaretPosition((,我想获得光标所在行的当前整数索引,然后能够使用与SQL Developer相同的键盘快捷键(Ctrl+Enter(选择同一行中的所有文本。如果有多行,则使用.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);

最新更新