Как центрировать позицию каретки JTextPane с помощью автопрокрутки? - PullRequest
3 голосов
/ 19 мая 2011

Я хотел бы автоматически прокрутить JTextPane, чтобы линия с кареткой (которая выделена) была отцентрирована.Я выделяю строку с помощью метода Utilities.getRow (... caretPosition).Кажется, довольно неизвестная проблема.Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Посмотрите на Центральная линия на панели прокрутки . Он центрирует каретку по вертикали, но тривиально центрировать каретку по горизонтали.

Вот код, модифицированный так, что он также центрируется по горизонтали:

public static void centerLineInScrollPane(JTextComponent component)
{
    Container container = SwingUtilities.getAncestorOfClass(JViewport.class, component);

    if (container == null) return;

    try
    {
        Rectangle r = component.modelToView(component.getCaretPosition());
        JViewport viewport = (JViewport)container;

        int extentWidth = viewport.getExtentSize().width;
        int viewWidth = viewport.getViewSize().width;

        int x = Math.max(0, r.x - (extentWidth / 2));
        x = Math.min(x, viewWidth - extentWidth);

        int extentHeight = viewport.getExtentSize().height;
        int viewHeight = viewport.getViewSize().height;

        int y = Math.max(0, r.y - (extentHeight / 2));
        y = Math.min(y, viewHeight - extentHeight);

        viewport.setViewPosition(new Point(x, y));
    }
    catch(BadLocationException ble) {}
}
0 голосов
/ 21 мая 2011

Вот как я это настроил:

int y = Math.max(0, r.y - (extentHeight / 2));
            y = Math.min(y, viewHeight - extentHeight);
            int oldY = viewport.getViewPosition().y;
            for(int i = oldY;i<y;i++){
            viewport.setViewPosition(new Point(0, i));
                Thread.sleep(10);
            }
...