Установка местоположения курсора для определенной строки в текстовом элементе управления

#java #swt

#java #swt

Вопрос:

У меня есть экран ввода, где пользователь вводит текстовый элемент управления SWT. По мере ввода пользователем я беру текст, обрабатываю его и показываю в отдельном текстовом элементе управления только для чтения. Длина результирующего текста может быть на несколько символов длиннее входного текста.

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

Я могу получить ввод строки курсора с помощью ivTextInput.getCaretLineNumber() , но нет соответствующего метода для установки номера строки курсора.

Я могу установить положение курсора в результате, используя ivTextResult.setSelection(ivTextInput.getCaretPosition()) , но обработка, которую я выполняю для входного текста, может «подтолкнуть» текст результата к точке, где он не виден без прокрутки.

В идеале отображение текста результата должно сочетаться с отображением текста ввода, чтобы то, что / где вводит пользователь, всегда совпадало с текстом результата.

Я пытался отслеживать дополнительные символы, добавляемые обработкой, но пользователь может добавлять текст в любом месте текстового элемента управления, и в результате беспорядок становится непригодным для использования, плюс то, как SWT text control обрабатывает новые строки, сбивает вычисления.

Комментарии:

1. Возможно, что-то, что используется Text.setTopIndex для установки строки вверху

2. Ага! Я этого НЕ видел и, более того, НЕ связал бы это с установкой позиции строки. Спасибо. Я настроил его так ivTextResult.setTopIndex( ivTextInput.getCaretLineNumber() - 1 ) , что он отлично работает

Ответ №1:

Text есть setTopIndex способ установить строку, видимую в верхней части элемента управления:

 public void setTopIndex(int index)
  

Комментарии:

1. Ну, да. Согласно комментариям к вопросу, опубликованным за 12 часов до вашего ответа.

2. Поскольку он сделал то, что вы хотите, я опубликовал это как ответ, чтобы это помогло другим людям

3. Если будет выполнен поиск (stackoverflow, Google и т. Д.), Не будет ли этот поиск включать текст вопроса и, следовательно, приводить человека сюда? Где они увидят решение в комментариях? Не пытаясь быть язвительным, я бы ожидал, что это сработает, и, следовательно, не нуждается в «ответе».

4. Комментарии не являются постоянными, они могут быть удалены. Люди ищут вопросы с ответами.