Установка позиции каретки в JTextArea - PullRequest
5 голосов
/ 10 мая 2011

У меня есть JTextArea. У меня есть функция, которая выделяет некоторое количество текста, когда вызывается какая-то комбинация. Это сделано правильно. Дело в том, что я хочу переместить курсор в начало выделения, когда выделен какой-то текст и нажата VK_LEFT. KeyListener реализован правильно, я тестировал его по-другому. Дело в том, что когда я пишу следующий код:

@Override public void keyPressed( KeyEvent e) {
        if(e.getKeyChar()==KeyEvent.VK_LEFT)
            if(mainarea.getSelectedText()!=null)
                mainarea.setCaretPosition(mainarea.getSelectionStart());
    }

и добавьте экземпляр этого слушателя в mainarea, выделите некоторый текст (используя мою функцию) и нажмите клавишу со стрелкой влево, позиция каретки установлена ​​в конце выделения ... И я хочу, чтобы это было в начале. .. в чем дело? : S

1 Ответ

7 голосов
/ 10 мая 2011

Вот фрагмент кода

    Action moveToSelectionStart = new AbstractAction("moveCaret") {

        @Override
        public void actionPerformed(ActionEvent e) {
            int selectionStart = textComponent.getSelectionStart();
            int selectionEnd = textComponent.getSelectionEnd();
            if (selectionStart != selectionEnd) {
                textComponent.setCaretPosition(selectionEnd);
                textComponent.moveCaretPosition(selectionStart);
            }
        }

        public boolean isEnabled() {
            return textComponent.getSelectedText() != null;
        }
    };
    Object actionMapKey = "caret-to-start";
    textComponent.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), actionMapKey);
    textComponent.getActionMap().put(actionMapKey, moveToSelectionStart);

Примечание: не рекомендуется переопределять обычно устанавливаемые сочетания клавиш, такие как f.i. Любая из клавиш со стрелками может раздражать пользователей ;-) Лучше поищите те, которые еще не связаны.

...