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);
平台: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);