簡體   English   中英

如何通過自動滾動使JTextPane的Caret位置居中?

[英]How do I center the Caret position of a JTextPane by autoscrolling?

我想在我的JTextPane中自動滾動,以便帶有插入符號(突出顯示)的行居中。 我通過使用Utilities.getRow(... caretPosition)方法突出顯示該行。 似乎是一個非常未知的問題。 謝謝!

看看滾動窗格中的中心線 它垂直居中,但是水平插入中心也是微不足道的。

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

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) {}
}

這是我調整它的方式:

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);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM