Изменение вида JScrollPane, чтобы была видна определенная часть JEditorPane - PullRequest
1 голос
/ 01 апреля 2019

Как сделать определенную строку текста в jEditorPane видимой, когда она находится в JScrollPane?

private JEditorPane myEditorPane = new JEditorPane();
private JScrollPane myScrollPane = new JScrollPane(myEditorPane);

myEditorPane.setContentType("text/html");
myEditorPane.setText("<html>" + getMyString(x) + "</html>");
myEditorPane.repaint();

getMyString получает длинную строку со многими строками, разделенными \ n.Программа имеет 2 панели.Затем программа перемещается по строкам на вышеприведенной панели и для каждого подчеркивает текст в этой строке и отображает соответствующее изображение на другой панели.Каждую просматривают в течение 1 секунды, затем переходят к подчеркиванию следующей строки текста и отображению следующего изображения.Я поняла это и подчеркнула их по очереди, отображая соответствующие изображения для каждой подчеркнутой строки текста.Но полоса прокрутки каждый раз переходит на начало.

Я думаю, что я должен использовать scrollRectToVisible в области просмотра, но как мне узнать, что такое прямоугольник для части строки в JEditorPAne?

1 Ответ

1 голос
/ 02 апреля 2019

Мне удалось манипулировать положением полосы прокрутки, напрямую вызвав setValue на полосе прокрутки.

myScrollPane.getVerticalScrollBar().setValue()

Вопрос в том, какое значение установить? Можете ли вы предположить, что строки текста одинаковы? Если они обернутся, вещи станут сложными. Я собираюсь предположить, что они этого не делают, и что высота каждой строки одинакова, потому что шрифт и размер одинаковы. Затем вам нужно знать, какой индекс представляет текущая отображаемая строка, и общее количество строк.

Получив это, вы конвертируете индекс строки в позицию Y редактора, умножая индекс строки на высоту редактора над количеством строк и устанавливая соответствующим образом.

myScrollPane.getVerticalScrollBar().setValue( (int) indexOfCurrentLine * myEditorPane.getHeight() / countOfLines );

Очевидно, что я не смог проверить это без SSCCE.

...