2012-01-24 1 views
3

Я имею дело с JEditorPane, чтобы отображать документы HTML, и я создал кнопку, которая прокручивает меня до следующего порта отображения каждый раз, когда я нажимаю на нее, «как будто я поворачиваю страницу книги».Сила JScrollBar для прокрутки до строки

Однако иногда я вижу часть линии в верхней части порта представления, так есть ли способ заставить JScrollBar прокрутить вперед до линии?

Я пробовал метод setBlockIncrement(), но он вообще не работал.

Здесь ты моя лучшая попытка:

//get the visible rectangle as well as the most bottom right point. 
Rectangle rec = jEditorPane1.getVisibleRect(); 
Point pt = new Point((int)rec.getX() +(int)rec.getWidth(),(int)rec.getY() +  (int)rec.getHeight()); 
// get the offset of the most bottom right point 
int off = jEditorPane1.viewToModel(pt); 
try { 
//get next viewable rectangle and scroll to it 
rec = jEditorPane1.modelToView(off+100); 
rec.height = jEditorPane1.getVisibleRect().height; 
jEditorPane1.scrollRectToVisible(rec); 
} catch (BadLocationException ex) { 
Logger.getLogger(NewJFrame2.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/) (из вашей лучшей попытки). –

+0

BTW - что должно произойти, если линия имеет встроенное изображение, а высота изображения больше, чем высота просмотра порта представления? –

+0

Благодарим вас за ответ, viewport - полный экран, и я редактирую настраиваемые файлы epub. Однако; если есть изображение, как вы описали, единственное, что нужно, - это запустить окно просмотра с линией или изображением, однако оно длительное. – muaz

ответ

4

Угадайте у вас есть позиция в документе вы хотите показать. Вы можете получить видимый прямоугольник позиции с помощью метода modelToView(). и используйте y-позицию для установки вашего окна просмотра. Например. используйте scrollRectToVisible, передавая y и высоту видового экрана в параметре прямоугольника.

+0

Благодарим за помощь, я уже пользуюсь методами modelToView() и scrollRectToVisible(), но в моей ситуации шрифт изменен и иногда отличается от строки, отображаемой в нижней части окна просмотра, поэтому, если я прокручиваю с высотой viewport эта часть строки снова появится в верхней части окна просмотра ???. – muaz

+0

Я думаю, да. Высота рельефа каретки = высота строки, независимо от того, какие шрифты используются в строке. – StanislavL