• ベストアンサー

スクロールパネルの使い方

スクロールパネルが上手く使えなく困っております。 現在の私の状況: フレームの上にメインパネルを張る。 メインパネルの上にスクロールパネルを張る。 スクロールパネルの上にサブパネルを張る。 下から フレーム ↓ メインパネル ↓ スクロールパネル ↓ サブパネル です。 サブパネルの高さが変わるので、スクロールパネルを使用したのですが、サブパネルの高さがスクロールパネルの高さ以上になってもスクロールパネルの上下スクロールバーが表示されません。 なぜでしょうか? 説明不足している個所がありましたらご指摘ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

> ご回答ありがとうございました。 > AWTです。 じゃあNo.1の回答は的外れです。 忘れてください。 サイズだけはスクロールペインよりも大きいけれど、 空っぽのパネルがスクロールできない、 ということですか。 スクロールペインは、子コンポーネントの getPreferredSize() メソッドを呼び出して、 子コンポーネントの大きさを知ります。 getSize() ではありません。 そして、それに対応する setPreferredSize() メソッドは、Swing にはありますが、AWT には ありません。 たとえば、次のように Panel を継承したクラスを 使えば、望みの振舞いをしそうですが、 こんなことしていいのかよく知りません。 このコードそのままじゃきっとまずいです。 せめて、内部で super.getPreferredSize() を呼び出して、その値が望んでる値より小さいとき だけ、値をすりかえるとか、そういう処理なら 多分問題ないでしょう。 Panel pane = new Panel() {  public Dimension getPreferredSize() {   return new Dimension(500, 500);  } }; ScrollPane scroller = new ScrollPane(); scroller.setSize(100, 100); scroller.add(pane);

t-tree
質問者

お礼

度々のご回答ありがとうございました。 Harryさんからのご回答にヒントを得て?サブパネルのサイズ設定後に[validate]というメソッドを発行したらスクロールできました。なぜだかわかりませんがうまくいきました。

その他の回答 (1)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.1

Swing ... でしょうか。 スクロールペインに貼り付け(?)てる サブパネルの高さというのは、プログラム中で 変化させてるわけですか? その箇所の後で revalidate() メソッドを呼び出したら どうなります?

t-tree
質問者

お礼

ご回答ありがとうございました。 AWTです。 >サブパネルの高さというのは、プログラム中で >変化させてるわけですか? ハイ、変えます。 しかし問題は、サブパネルはデフォルトでスクロールパネルより大きいのにも関わらずスクロールが出ないという事です。 その箇所というのは、サブパネルの高さを変える箇所でしょうか?