スクロールペイン


コンポーネントをスクロールする

以前、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を子コンポーネントとして
スクロールペインに追加する方法が考えられるでしょう



前のページへ戻る次のページへ