JTextPane
コンテンツを更新した後、作成する前に、のキャレット位置を 0 に設定するだけですJScrollPane
。JScrollPane
これにより、無意味に後方にスクロールすることなく、テキストの先頭をすぐに表示することが強制されます。
次のようなことをしてください:
JTextPane textPane = new JTextPane ();
textPane.setText ( "Some long text here..." );
textPane.setCaretPosition ( 0 );
JScrollPane scrollPane = new JScrollPane ( textPane );
既にテキストがある場合は、EDT で更新とキャレット位置の切り替えを一緒に行うだけです。
public static void main ( String[] args ) throws InterruptedException
{
final JFrame frame = new JFrame ();
final JTextPane textPane = new JTextPane ();
frame.add ( new JScrollPane ( textPane ) );
frame.setSize ( 400, 300 );
frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
Thread.sleep ( 2000 );
SwingUtilities.invokeLater ( new Runnable ()
{
public void run ()
{
textPane.setText ( "line\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" );
textPane.setCaretPosition ( 0 );
}
} );
Thread.sleep ( 2000 );
SwingUtilities.invokeLater ( new Runnable ()
{
public void run ()
{
textPane.setText ( "line2\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" );
textPane.setCaretPosition ( 0 );
}
} );
}
しかし、それが最善の解決策ではないことに同意します。コンテンツが変更されたときに textpane キャレットを強制的に 0 にする簡単な方法はないと思います。