3

我想在我的 JTextPane 中自动滚动,以便带有插入符号(突出显示)的行居中。我使用 Utilities.getRow(...caretPosition) 方法突出显示该行。似乎是一个相当未知的问题。谢谢!

4

2 回答 2

2

看看Scroll Pane 中的 Center Line。它将插入符号垂直居中,但将插入符号水平居中也是微不足道的。

这是修改后的代码,因此它也水平居中:

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) {}
}
于 2011-05-19T12:15:35.497 回答
0

这就是我调整它的方式:

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);
            }
于 2011-05-21T06:05:55.760 回答