画面制御機能が提供する画面のクラスで、JFCScrollablePanelあるいはJFLScrollablePanelから派生した以下のクラスが、スクロール機能を持ちます。
JFCEntryPanel
JFLEntryScrollablePanel
JFCEntryInterfacePanel
JFLEntryInterfaceScrollablePanel
JFCMultiPagePanel
JFLMultiPageScrollablePanel
これらのスクロールパネルは、内部で可視領域(ビューポート)と仮想領域(ビューパネル)を持ちます。
可視領域のサイズはスクロールパネルのサイズに合わせて自動的に調整します。仮想領域が可視領域のサイズより大きいとき、スクロール機能を利用して仮想領域の表示位置を動かすことができます。スクロール機能には、メソッド呼出しによるスクロールと、スクロールバー操作によるスクロールがあります。
スクロールパネルは、この上にContainerの派生クラスである可視領域を貼り付けて、更に可視領域にContainerの派生クラスである仮想領域を貼り付けた3階層パネルの構造になっています。このため、スクロールパネルの画面をカスタマイズしたい場合(例:マウスカーソルを砂時計表示したい場合など)は、getViewPanelメソッドを利用して仮想領域を取得してから、仮想領域に対して操作を行う必要があります。ただし、以下メソッドは仮想領域に対して作用するように設計されているため、ユーザは普通のパネルと同様に利用することができます。
部品の追加/削除(add、remove、removeAll)
レイアウトの取得/設定(getLayout、setLayout)
前景色の取得/設定(getForeground、setForeground)
背景色の取得/設定(getBackground、setBackground)
最初にフォーカスが移動する部品の取得/設定(getFirstFocusComponent、setFirstFocusComponent)
フォーカス移動のラップアラウンド状態の取得/設定(isWrapAround、setWrapAround)
キーボードのタブキーによるフォーカス移動ができるかどうかの取得(isFocusTraversable)
スクロールパネルの開発手順
仮想領域のサイズを設定します。
スクロールパネルのコンストラクタへの引数として指定するか、setViewSizeメソッドを利用して、動的に仮想領域のサイズを設定します。
仮想領域は可視領域より小さくても問題ありませんが、少なくとも貼り付けた部品(コンポーネント)がすべて収まる領域を確保する必要があります。必要十分なサイズを確保しなかった場合、仮想領域範囲外に貼られた部品は正しく描画されません。
仮想領域のサイズは必ず設定する必要があります。ただし、JFCScrollablePanelのスクロールバー表示方針がPREVENT_SCROLL の場合、仮想領域は自動的に可視領域に収まるようにリサイズされます。
スクロールバー表示方針を設定します。
スクロールパネルのコンストラクタへの引数として指定するか、setScrollbarDisplayPolicyメソッドを利用して、動的にスクロールバー表示方針を設定します。また、スクロールバー表示方針を取得するには、getScrollbarDisplayPolicyメソッドを利用します。
スクロールパネルには、以下の4種類のスクロールバー表示方針があります。
PREVENT_SCROLL | すべてのスクロール機能を利用しません。この方針がデフォルトとなります。 |
SCROLLBARS_ALWAYS | すべてのスクロール機能を利用し、常にスクロールバーを表示します。 |
SCROLLBARS_AS_NEEDED | スクロール機能を利用し、スクロールバーは仮想領域が可視領域より大きい場合に自動的に表示します。 |
SCROLLBARS_NEVER | メソッド呼出しによるスクロール機能を利用しますが、常にスクロールバーを表示しません。 |
メソッド呼出しによるスクロール機能
スクロールバーを操作することにより、仮想領域の表示部分を移動(スクロール)することができますが、メソッド呼出しによるスクロールも可能です。ただし、スクロールバー表示方針がPREVENT_SCROLLの場合は、メソッド呼出しによるスクロールはできません。また、仮想領域が可視領域より大きい状態である必要があります。
スクロールには以下のメソッドが利用できます。
moveViewPort(int, int)
scrollViewPort(Component, int)
showUpComponent(Component, int)
setScrollPosition(int,int)
setScrollPosition(Point)