JScrollPane+JPanelを組み合わせた内部領域の再描画

Pocket

JScrollPaneとJPanelを組み合わせたスクロール領域にコンポーネントを削除したり追加したりする方法。
単純に

panel.removeAll();
panel.add(new SomeComponent());
panel.validate();
panel.repaint();

とやるだけだとうまくスクロールがリフレッシュされない。
内部コンポーネントを配置していくことによって収まりきらない場合パネルは推奨サイズから拡張されることになります。残念ながら拡張されたサイズはパネル内からコンポーネントを削除しても縮小されたりすることはありません。
そこで、JPanel#removeAllをした場合に限った話ですが、パネル内からコンポーネントを全削除した後にパネルサイズを推奨サイズに強制的に戻してやります。

panel.removeAll();
// 拡張されたパネルサイズを推奨サイズに戻してやる
panel.setSize(panel.getPreferredSize());
panel.add(new SomeComponent());
panel.validate();
panel.repaint();

こんな感じでOK。

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください