将JScrollBar集中到插入符号的替代方法

时间:2013-12-02 14:49:28

标签: java swing jscrollpane

我正在尝试将JScrollBar自动居中到插入符号。以下是我目前正在使用的内容,但由于文档文本内容太大,因此需要大约1.2秒来居中。

我的想法是,当我需要突出显示某些文本时,垂直滚动条应自动将突出显示的文本居中到可见的Rectangle,但我目前的这种做法太慢了。

此行大约需要1.2秒:

r = component.modelToView(component.getCaretPosition()); 

是否有上述生产线或不同技术的另一种替代方案可将垂直滚动条置于插入位置?以下是我正在使用的完整方法。

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

    Rectangle r = null;
    if (container == null)
        return;
    try {   
        r = component.modelToView(component.getCaretPosition()); //Takes about 1.2 seconds
    } catch (Exception e) {
        return;
    }
    JViewport viewport = (JViewport) container;
    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(0, y));
}

0 个答案:

没有答案