首页 > 解决方案 > 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();
    }
}

标签: javafxkeyevent

解决方案


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

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

推荐阅读