JavaFX:Select textarea 中的单行文本,其中 .getCaretPosition()

JavaFX: Select a single line of text in a textarea where .getCaretPosition()

平台:Intellij IDEA

语言:JavaFX

我希望能够select光标所在的一行文本。类似于 SQL Developer,我有一个允许多行输入或查询的文本区域。很高兴能够在测试查询时将文本区域用作查询库。

使用 txtOutput.getCaretPosition(),我想获取光标所在行的当前整数索引,然后能够 select 同一行中的所有文本使用与 SQL Developer (Ctrl + Enter) 相同的键盘快捷键。如果有多行,使用 .selectForward() 或 .selectBackward() 将不起作用。

任何关于如何将文本的 selection 限制为一行或 select 直到特定字符(例如“;”)的文本的任何帮助或建议将不胜感激。

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();
    }
}

只需在文本中搜索相关的定界符(例如换行符),然后 select 相关部分。这里唯一需要注意的是如果用户 select 是最后一行,在这种情况下会有后续的换行符:

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);