ビューポートがJScrollPane
のサブクラスである がありJPanel
ます。このパネルは でレイアウトされてBoxLayout
おり、ユーザーの操作により、コンポーネントの水平幅が変更される場合があります。スクロール バーが必要なほど十分な数のコンポーネントがある場合、コンポーネントの水平サイズを変更してからサブクラス (ビューポート ビュー) を呼び出すとrevalidate()
、JPanel
常にスクロール ペインが (0,0) にリセットされます。
現在のビューを保持したいので、コンポーネント リスナーを設定しcomponentMoved()
、値を格納しますgetLocation()
(これはすべて JPanel サブクラスまたはビューポート ビューにあります)。revalidate()
呼び出した直後にsetLocation()
、保存された場所を使用して呼び出します (イベント ディスパッチ スレッド上)。ただし、ビューの位置が (0,0) に設定されていると、すぐに保存された場所にジャンプします。JScrollPane
(0,0) に戻るのを止める方法はありますか? ビューポート ビューのサイズが変更されたことを伝えるより良い方法はありますか?
をサブクラス化し、オーバーライドしてブレークポイントを配置することで、(0,0)
がどこから来ているかを把握しようとしましたが、そこにはヒットしていません (ただし、スクロール ホイールを動かしたときです)。何が起こっているのか知っている人はいますか?JScrollBar
setValue()