スクロールペイン
コンポーネントをスクロールする
以前、AWTコンポーネントの一つでスクロールバーの生成方法と使用例を紹介しました
しかし、Scrollbarクラスでコンポーネントをスクロールするとなると
細かい計算や工程が必要で、非常に面倒なものです
そこで、コンポーネントのスクロール処理にはjava.awt.ScrollPaneクラスを使用します
このコンポーネントは、単一のコンポーネントをに対してスクロール機能を提供します
スクロールペインが持つコンポーネントは必ず1つまでで、追加しようとするとそれまでのコンポーネントは削除されます
コンストラクタは次のものがあります
public ScrollPane()
public ScrollPane( int scrollbarDisplayPolicy )
パラメータになにも指定しない場合は、デフォルトのスクロールペインが
scrollbarDisplayPolicyを指定した場合は、その表示形式でスクロールペインが登録されます
引数に指定する数値は、同クラスがサポートする定数フィールドを指定します
public static final int SCROLLBARS_ALWAYS | 常に表示
|
public static final int SCROLLBARS_AS_NEEDED | 子コンポーネントに応じて表示
|
public static final int SCROLLBARS_NEVER | 常に非表示
|
デフォルトはSCROLLBARS_AS_NEEDEDです
これは、子コンポーネントのサイズが水平または垂直方向で表示しきれない時に
対応したスクロールバーを表示します
常に非表示というのは意味がない気がしますが
スクロールペインはプログラムで明示的に操作することもできるため
プログラム側で操作する不可視スクロールバーを必要とする時に重要になります
現在のスクロールバーの位置を得るにはgetScrollPosition()メソッドを
子コンポーネント内の指定位置にスクロールを移動するにはsetScrollPosition()
を使用します
public Point getScrollPosition()
public void setScrollPosition( int x, int y )
public void setScrollPosition( Point p )
getScrollPosition()メソッドは、座標をPointオブジェクトで返します
xとyには、スクロール先のx座標とy座標を指定し
pは座標を表すPointオブジェクトを渡します
ScrollPaneクラスは、Containerクラスを拡張しているので
そのほかのコンポーネントに必要な基本メソッドを使用することができます
import java.applet.Applet;
import java.awt.*;
/* <applet code="App54.class" width="300"height="300">
</applet>
*/
public class App54 extends Applet {
ScrollPane sp = new ScrollPane();
Panel pl = new Panel();
public void init() {
for(int i = 0 ; i < 50 ; i++) pl.add(new Button("Kitty on your lap"));
pl.setLayout(new GridLayout(10 , 5));
sp.setSize(300 , 200);
sp.add(pl);
add(sp);
}
}
これで、子コンポーネントをスクロールバーで動かすことができます
もし大きい画像をスクロールさせたい場合は
Canvasにイメージを描画して、Canvasを子コンポーネントとして
スクロールペインに追加する方法が考えられるでしょう