Могу ли я определить строку, на которой курсор находится в Java? - PullRequest
0 голосов
/ 09 февраля 2020

В настоящее время я работаю над проектом Java. Но для этого я хочу прочитать строку из курсора, т.е. я хочу прочитать строку, в которой курсор находится в данный момент. Как я могу это сделать?

1 Ответ

0 голосов
/ 10 февраля 2020

Не совсем понятно, где именно вы размещаете текстовую каретку (курсор). В приведенных ниже примерах методов предполагается, что курсор помещается на слово, содержащееся в тексте, отображаемом в текстовом компоненте Swing, например JTextField , JTextArea , JEditPane , et c, который доступен для просмотра в вашем собственном проекте приложения. Класс javax.swing.text.Utilities может получить нужные данные.

public static String getWordAtCaret(JTextComponent tc) {
    String res = null;
    try {
        int caretPosition = tc.getCaretPosition();
        int startIndex = Utilities.getWordStart(tc, caretPosition);
        int endIndex = Utilities.getWordEnd(tc, caretPosition);
        res = tc.getText(startIndex, endIndex - startIndex);
    }
    catch (BadLocationException ex) {
        // Purposely Ignore so as to return null.
        // Do what you want with the exception if you like.
    }
    return res;
}

public static String getNextWordFromCaret(JTextComponent tc) {
    String res = null;
    try {
        int caretPosition = Utilities.getNextWord(tc, tc.getCaretPosition());
        int startIndex = Utilities.getWordStart(tc, caretPosition);
        int endIndex = Utilities.getWordEnd(tc, caretPosition);
        res = tc.getText(startIndex, endIndex - startIndex);
    }
    catch (BadLocationException ex) {
        // Purposely Ignore so as to return null.
        // Do what you want with the exception if you like.
    }
    return res;
}

public static String getPreviousWordFromCaret(JTextComponent tc) {
    String res = null;
    try {
        int caretPosition = Utilities.getPreviousWord(tc, tc.getCaretPosition()) - 2;
        int startIndex = Utilities.getWordStart(tc, caretPosition);
        int endIndex = Utilities.getWordEnd(tc, caretPosition);
        res = tc.getText(startIndex, endIndex - startIndex);
    }
    catch (BadLocationException ex) {
        // Purposely Ignore so as to return null.
        // Do what you want with the exception if you like.
    }
    return res;
}

Примечание: Пунктуация, связанная с определенным словом, может дать неожиданные результаты, если используя методы getNextWordFromCaret () или getPreviousWordFromCaret (). Знаки препинания, такие как точка (. ), можно рассматривать как слово с помощью любого из этих методов, и поэтому необходимо уделить внимание их предотвращению.

...