bugfix> java > 投稿

私のJScrollPaneは、次のコードを使用してJTextAreaにテキストが追加されるたびに下にスクロールできます。

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

ただし、テキストが長すぎて、ボックスの表示可能な部分に収まらない場合は、右(テキスト領域のリテラル端)にスクロールします。

おそらくテキストの水平方向の変更を無視して、垂直方向に自動的にスクロールする(表示されている現在の水平列を維持する)方法はありますか。これ、または常に左側に配置します。

回答 2 件
  • append(String) のようなものがある場合  メソッドを使用すると、 JTextArea に簡単に追加できます 、その領域を次のようなもので更新することもできます。

    public void append(String s) {
        area.append(s.endsWith("\n") ? s : s + "\n"); // your choice here
        area.setCaretPosition(Math.max(area.getText().lastIndexOf("\n"), 0)); // update pos
    }
    
    

    キャレットを最後の \n に置く  テキスト内。

  • ビューポートの位置を手動で調整する必要があります。したがって、次のようなコードでappend(...)メソッドを作成できます。

    public void append(JTextArea textArea, String text)
    {
        textArea.append( text );
        Component parent = textArea.getParent();
        if (parent instanceof JViewport)
        {
            JViewport viewport = (JViewport)parent;
            Point p = viewport.getViewPosition();
            if (p.x != 0)
            {
                p.x = 0;
                viewport.setViewPosition( p );
            }
        }
    }
    
    

    または、ビューの位置を変更する代わりに、キャレットを行の先頭にリセットすると、ビューポートが自動的に左にリセットされます。

    textArea.append( text );
    textArea.setCaretPosition( Utilities.getRowStart(textArea, textArea.getCaretPosition() );
    
    

あなたの答え