JavaTM Platform
Standard Ed. 6

javax.swing
クラス SizeSequence

java.lang.Object
  上位を拡張 javax.swing.SizeSequence

public class SizeSequence
extends Object

SizeSequence オブジェクトは、サイズおよび対応する位置の、順序付けされたリストを効果的に維持します。SizeSequence の状況として適切な例としては、サイズが等しくない複数の行を表示するコンポーネントの場合があります。この場合、単一の SizeSequence オブジェクトを使って、すべての行の高さと Y 位置を追跡できます。

もう 1 つの例として、列サイズが等しくない JTable などの複数列コンポーネントがあります。JTable は、単一の SizeSequence オブジェクトを使ってすべての列の幅と X 位置を格納できます。続いて JTable は、SizeSequence オブジェクトを使って特定の位置に対応する列を見つけることができます。1 つまたは複数の列サイズが変更になったときにはいつでも、JTableSizeSequence オブジェクトを更新できます。

次の図は、複数列コンポーネントのサイズと位置データの関係を示しています。

最初の項目は位置 0 から始まり、2 番目の項目は前の項目のサイズと同じ位置から始まり、そのあとも同様になる。

この図で、最初のインデックス (0) は最初の列に対応し、2 番目のインデックス (1) は 2 番目の列に対応する、というようになっています。最初の列の位置は 0 で始まり、この列は size0 ピクセルを占めます。 size0getSize(0) が返す値です。したがって最初の列は size0 - 1 で終わります。 続いて 2 番目の列が size0 から始まり、size1 (getSize(1)) ピクセルを占めます。

SizeSequence オブジェクトは単に軸に沿った間隔を表します。上記の例では、間隔はピクセル単位の高さまたは幅を表しています。しかし、一日のうちの時間など、ほかの測定単位も同じように有効です。

実装上の注意:

通常、エントリのサイズと位置を格納する際には、サイズの格納か、または位置の格納のどちらかを選びます。描画中に必要な共通操作が 2 つあります。それらは、getIndex(position)setSize(index, size) です。内部形式にどちらを選んでも、エントリ数が大きくなると 2 の操作のどちらかは効率が悪くなります。サイズを格納した場合、特定の位置を囲むエントリのインデックスの検索は、エントリ数に比例して時間がかかります。逆に位置を格納した場合、特定のインデックスにあるエントリのサイズの設定は、影響を受けるエントリの位置を更新する必要があり、やはりエントリ数に比例して計算に時間がかかります。

上記の方法と同じく、このクラスは内部に N 個の整数の配列を保持しますが、サイズベースの方法と位置ベースの方法の中間の、ハイブリッドなエンコーディングを使います。これによって、情報を格納するのに必要な空間は同じですが、ほとんどの操作を O(N) 時間ではなく Log(N) 時間で実行できるデータ構造となります。 N はリストにあるエントリ数です。

エントリ数の O(N) のまま残る操作は、insertEntries メソッドと removeEntries メソッドの 2 つです。両メソッドとも、内部配列を整数サイズのセットに変換し、それを新しい配列にコピーし、そのあとハイブリッド表現を適切に修正することによって実装します。

導入されたバージョン:
1.3

コンストラクタの概要
SizeSequence()
          エントリを格納していない新しい SizeSequence オブジェクトを生成します。
SizeSequence(int numEntries)
          指定された数のエントリを格納する、新しい SizeSequence オブジェクトを生成します。
SizeSequence(int[] sizes)
          指定されたサイズを格納する新しい SizeSequence オブジェクトを生成します。
SizeSequence(int numEntries, int value)
          指定された数のエントリを格納する、新しい SizeSequence オブジェクトを生成します。
 
メソッドの概要
 int getIndex(int position)
          指定された位置に対応するエントリのインデックスを返します。
 int getPosition(int index)
          指定されたエントリの開始位置を返します。
 int getSize(int index)
          指定されたエントリのサイズを返します。
 int[] getSizes()
          全エントリのサイズを返します。
 void insertEntries(int start, int length, int value)
          連続するエントリのグループをこの SizeSequence に追加します。
 void removeEntries(int start, int length)
          連続するエントリのグループをこの SizeSequence から削除します。
 void setSize(int index, int size)
          指定されたエントリのサイズを設定します。
 void setSizes(int[] sizes)
          sizes 引数を使って、この SizeSequence オブジェクトをリセットします。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

SizeSequence

public SizeSequence()
エントリを格納していない新しい SizeSequence オブジェクトを生成します。エントリを登録するには、insertEntries または setSizes を使います。

関連項目:
insertEntries(int, int, int), setSizes(int, int)

SizeSequence

public SizeSequence(int numEntries)
指定された数のエントリを格納する、新しい SizeSequence オブジェクトを生成します。エントリはすべて、サイズ 0 に初期化されています。

パラメータ:
numEntries - 追跡するサイズの数
例外:
NegativeArraySizeException - 次の条件が成立する場合: numEntries の値が 0 より小さい場合

SizeSequence

public SizeSequence(int numEntries,
                    int value)
指定された数のエントリを格納する、新しい SizeSequence オブジェクトを生成します。エントリはすべて、サイズ value に初期化されています。

パラメータ:
numEntries - 追跡するサイズの数
value - 各サイズの初期値

SizeSequence

public SizeSequence(int[] sizes)
指定されたサイズを格納する新しい SizeSequence オブジェクトを生成します。

パラメータ:
sizes - SizeSequence に格納されるサイズの配列
メソッドの詳細

setSizes

public void setSizes(int[] sizes)
sizes 引数を使って、この SizeSequence オブジェクトをリセットします。このメソッドは、このオブジェクトが sizes 配列と同じだけのエントリを格納するよう初期化します。各エントリのサイズは、sizes の対応する項目の値に初期化されます。

パラメータ:
sizes - この SizeSequence に格納されるサイズの配列

getSizes

public int[] getSizes()
全エントリのサイズを返します。

戻り値:
このオブジェクトのサイズを格納する新しい配列

getPosition

public int getPosition(int index)
指定されたエントリの開始位置を返します。たとえば、getPosition(0) は 0 を返し、getPosition(1)getSize(0) を、getPosition(2)getSize(0) + getSize(1) を返します。

indexlength より大きい場合、返される値は無意味です。

パラメータ:
index - 位置が要求されているエントリのインデックス
戻り値:
指定されたエントリの開始位置

getIndex

public int getIndex(int position)
指定された位置に対応するエントリのインデックスを返します。たとえば getIndex(0) は 0 ですが、これは、最初のエントリはいつも位置 0 から始まるためです。

パラメータ:
position - エントリの位置
戻り値:
指定された位置を占めるエントリのインデックス

getSize

public int getSize(int index)
指定されたエントリのサイズを返します。index が一定の範囲内 (0 <= index < getSizes().length) にない場合、動作は未確定です。

パラメータ:
index - エントリに対応するインデックス
戻り値:
エントリのサイズ

setSize

public void setSize(int index,
                    int size)
指定されたエントリのサイズを設定します。index の値が一定の範囲内 (0 <= index < getSizes().length) にない場合、動作は未確定です。

パラメータ:
index - エントリに対応するインデックス
size - エントリのサイズ

insertEntries

public void insertEntries(int start,
                          int length,
                          int value)
連続するエントリのグループをこの SizeSequence に追加します。startlength の値は、(0 <= start < getSizes().length) AND (length >= 0) の条件を満たす必要があります。この条件を満たさない場合、動作が未確定なため、例外がスローされる場合があります。

パラメータ:
start - グループ内の最初のエントリに 割り当てられるインデックス
length - グループのエントリ数
value - 新しい各エントリに割り当てるサイズ
例外:
ArrayIndexOutOfBoundsException - パラメータが 次の範囲内にない場合: (0 <= start < (getSizes().length)) AND (length >= 0)

removeEntries

public void removeEntries(int start,
                          int length)
連続するエントリのグループをこの SizeSequence から削除します。startlength の値は、(0 <= start < getSizes().length) AND (length >= 0) の条件を満たす必要があります。この条件を満たさない場合、動作が未確定なため、例外がスローされる場合があります。

パラメータ:
start - 削除される最初のエントリのインデックス
length - 削除されるエントリの数

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。