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