2012-07-02 2 views
1

В приложении с компонентами Java Swing у меня есть JTextPane внутри нередактируемого JScrollPane и некоторые другие поля, в которых пользователь может ввести некоторые критерии. Если пользователь нажимает на определенную кнопку или пункт меню, будет поиск раздела документа в JTextPane, который соответствует заданным критериям, и если совпадение найдено, раздел будет выделен.Как прокрутить до заданной позиции в документе, отображаемом в JScrollPane

Эта часть решена; Я могу найти соответствующий сегмент документа, узнать, где он начинается и заканчивается (с точки зрения целочисленных смещений), и выделять его.

Но этот выделенный сегмент мог прокручиваться с экрана, и мне нужно, чтобы он прокручивался в пределах видимой части JScrollPane. Я вижу, что есть метод scrollRectToVisible(Rectangle) на JComponent, который кажется, что он мог бы выполнить это задание, но я не вижу, как преобразовать из целого целого текста текстового документа в Rectangle.

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

+0

Если бы ты не слышал [modelToView (...)] (http://docs.oracle.com/ javase/7/docs/api/javax/swing/plaf/TextUI.html # modelToView (javax.swing.text.JTextComponent, int)) и методы viewToModel (...). Похоже, они подходят для этого случая, упомянутого вами. Взгляните на этот [пример] (http://stackoverflow.com/questions/10462725/actionlistener-for-a-specific-text-inside-a-jtextarea/10463120#10463120) для получения дополнительной информации. –

+0

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

ответ

2

Ну, вы можете использовать modelToView(...), который может вернуть один объект Rectangle, который вы можете использовать для своего случая.

Вот один example по @camickr относительно того же

Еще один Example здесь

+0

Эта первая ссылка на «TextUI» казалась несущественной, поскольку, похоже, этот класс предназначен для написания подключаемого внешнего вида и я не вижу, как я буду использовать его для этой цели. Однако другие примеры использовали 'modelToView' на самом текстовом компоненте, и их техника работала. – Gigatron

+0

Трудно поместить эту ссылку для меня в комментарии, на самом деле это класс 'TextUI', который имеет эти методы' modelToView (...) и viewToModel (...) ', чтобы дать вам представление о параметрах метод, вот почему я дал эти ссылки :-) –

0

Если ваши текстовые строки имеют одинаковую высоту, то значение y для Rectangle - это позиция документа * высота строки.

Если ваши текстовые строки не имеют одинаковой высоты, то значение y прямоугольника представляет собой сумму высот линии до, но не включая позицию документа.

Значение x для Rectangle будет равно нулю или некоторому смещению, которое имеет смысл для вашего текста.

Смежные вопросы