Java Swing-JScrollPaneを使用して、上にスクロールして戻す


82

JScrollPaneを使用して、テキストエディタとして機能するテキストコンポーネントを持つJFrameでスクロールできるようにしています。このエディターでテキストを設定した後、ファイルの先頭に何があるかを確認できるように、テキストを一番上までスクロールして戻します。

誰かがこれを行う方法を知っていますか?

java  swing 

回答:


136

テキストコンポーネントでsetCaretPosition(0)を呼び出すと、テキストコンポーネントが一番上にスクロールします。


そうです、問題はキャレットがテキストコンポーネントの最後にあったことでした。また、テキストエディタで「setText(...)」を呼び出した後にも機能します。(JScrollPane内のテキストパネルとしてJEditorPaneインスタンスでテストされています)。
ギヨーム

37

テキストコンポーネントを使用していない場合に備えて、ここに投稿されているスレッドをご覧ください。 。JScrollPaneでのスクロールバーの設定

彼らの解決策は、invokeLaterを介してスレッドをスピンオフすることです

final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() { 
       scroll.getVerticalScrollBar().setValue(0);
   }
});

1
これは私の質問に最も近い答えです。stackoverflow.com/ questions / 42961012 / …しかし、JScrollPane内にパネルがある場合、このメソッドをどのように使用できますか?
In-young Choung 2017年

3
invokeLaterスレッドをスピンオフするのではなく、現在のイベント(ボタンのクリック、または呼び出すコードのコンテキストなどinvokeLater)および他の既にキューに入れられているイベントの終了後に実行されるイベントをキューに入れるだけです。
radiodef 2018

10

これは仕事になります:

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

9

テキストコンポーネントのsetCaretPosition(0)直後にメソッドを使用できsetText(String t)ます。


1
@Craigの以前の回答のコピー。
カールリヒター


7

あなたはこれを試すことができます:

 scrollPane.getViewport().setViewPosition(new Point(0,0));

JavaDocsによると、setViewPosition()は次のように動作します。

ビューポートの左上隅に表示されるビュー座標を設定します。ビューがない場合は何もしません。


4
これは私にはうまくいきませんでした-ScrollPaneは一番上にジャンプし、すぐに再び一番下に落ちます。
jwoolard 2010年

それは私のために働いた¯\ _(ツ)_ /¯私は私のJScrollPane内にJTableを持っています。
mikato

@jwoolardはい、ここで紹介する解決策は、私が遭遇した多くのケースでは機能しません。しかし、私が今朝提起した解決策に注意してください。
リチャードT

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.