S-JIS[2007-02-02/2009-03-14] 変更履歴

JScrollPane(Swing)

JScrollPaneは、 他のペインにスクロールバーを付けることが出来る。


基本形

	/**
	 * スクロール機能付きペインの初期化
	 */
	private void initPane(Container c) {
		JEditorPane editor = new JEditorPane();
		〜

		JScrollPane scroll = new JScrollPane(editor);
		c.add(scroll);
	}

スクロールバーの有無を指定する例。[2007-02-22]

	JScrollPane scroll = new JScrollPane(pane,
		ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,	//縦
		ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);	//横
AS_NEEDED 必要に応じて表示される。
NEVER 常に表示されない。
ALWAYS 常に表示される。

ウィンドウサイズが変更された場合のスクロールバーの動作

縦だけスクロールさせて横のサイズは可変(ウィンドウの最大幅で固定)にするような場合、getPreferredSize()が「最小の(必要な)サイズ」を返すようにしないと、 スクロールバーが更新されない。[2007-05-13]

つまり、ウィンドウサイズが変更された時にgetPreferredSize()が呼ばれ、必要とするサイズが取得される。これとウィンドウのサイズが比較され、レイアウトの変更が必要かどうか判断される。
必要と判断されるとlayout()が呼ばれる(サイズに応じてスクロールバーが変更される)。
(必要でないと判断されるとlayout()が呼ばれない為、スクロールバーは変更されない)

layout()は非推奨メソッドになっており、doLayout()に置き換えられたようだ。
しかしdoLayout()の実装は、「layout()を呼び出す」だけ。layout()が無くなるのなら、逆にlayout()の実装が「doLayout()の呼び出し」になるべきだと思うんだけどな〜?


コーナー(隅)の描画

コーナー(隅)にコンポーネントをセットし、自由に描画することが出来る。[2009-03-14]
コーナーというのは、スクロールバーとヘッダーエリアの隙間など。以下のような部分。

UL 列ヘッダー UR



内容


LL □□□ LR
ビュー関連メソッド
位置 説明 設定メソッド 取得メソッド
内容
(列ヘッダー)
スクロールさせるペイン(コンポーネント)本体 new JScrollPane(コンポーネント)
setViewportView(コンポーネント)
getViewport().getView()
列ヘッダー 列ヘッダー(上側の見出し)
JTableの場合、内容本体が兼ねる。
setColumnHeaderView(コンポーネント) getColumnHeader().getView()
行ヘッダー 行ヘッダー(左側の見出し) setRowHeaderView(コンポーネント) getRowHeader().getView()
UL 左上コーナー setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, コンポーネント) getCorner(位置)
UR 右上コーナー setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, コンポーネント)
LL 左下コーナー setCorner(ScrollPaneConstants.LOWER_LEFT_CORNER, コンポーネント)
LR 右下コーナー setCorner(ScrollPaneConstants.LOWER_RIGHT_CORNER, コンポーネント)

Swing目次へ戻る / Java目次へ戻る
メールの送信先:ひしだま