#java #swing #jscrollpane #jeditorpane
#java #swing #jscrollpane #jeditorpane
Вопрос:
Как мне сделать видимой определенную строку текста в 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:
Я смог управлять положением полосы прокрутки, напрямую вызывая setValue на полосе прокрутки.
myScrollPane.getVerticalScrollBar().setValue()
Вопрос в том, какое значение установить? Можете ли вы предположить, что строки текста одинаковы? Если они завершатся, все усложнится. Я собираюсь предположить, что они этого не делают, и что высота каждой строки одинакова, потому что шрифт и размер одинаковы. Затем вам нужно знать, какой индекс имеет текущая отображаемая строка, и общее количество строк.
Как только вы это получите, вы преобразуете индекс строки в позицию редактора Y, умножая индекс строки на высоту редактора на количество строк и устанавливаете соответственно.
myScrollPane.getVerticalScrollBar().setValue( (int) indexOfCurrentLine * myEditorPane.getHeight() / countOfLines );
Очевидно, что я не смог протестировать что-либо из этого без SSCCE.