JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 SizeSequence

java.lang.Object
  繼承者 javax.swing.SizeSequence

public class SizeSequence
extends Object

一個 SizeSequence 物件,它有效地維護一個套件含大小和相應位置的順序列表。有一種情況需要用到 SizeSequence,即顯示具有不同大小的多個行的元件。在這種情況下,用一個單獨的 SizeSequence 物件可追蹤所有行的高度和 Y 位置。

另一個例子是包含多列的元件,比如 JTable,它的各列大小不盡相同。JTable 可使用一個單獨的 SizeSequence 物件來存儲所有列的寬度和 X 位置。然後,JTable 可以使用 SizeSequence 物件來尋找與特定位置對應的列。只要有一列或多列大小發生更改,JTable 就會更新該 SizeSequence 物件。

下圖顯示了多列元件中大小和位置資料之間的關係。

第一項起始位置為 0,第二項起始位置等於
前一項的大小,依此類別推。

在上圖中,第一個索引 (0) 對應第一列,第二個索引 (1) 對應第二列,依此類別推。第一列位置從 0 開始,該列佔據 size0 個像素,其中 size0getSize(0) 返回的值。因此,第一列在 size0 - 1 位置結束。然後第二列從 size0 位置開始並佔據 size1 (getSize(1)) 個像素。

注意,SizeSequence 物件只代表軸上的間隔。在我們的範例中,間隔代表以像素為單位的高度或寬度。但是,任何其他測量單位(例如,時間單位為天)也同樣有效。

實作注意事項

通常,存儲條目的大小和位置時,我們會選擇是存儲條目的大小還是位置。呈現時需要兩個公共操作:getIndex(position)setSize(index, size)。無論選擇哪種內部格式,當條目數變大時,這兩個操作中每一個開銷都很大。如果存儲的是大小,尋找位於特定位置的條目索引與條目數呈線性關係。反過來,如果存儲的是位置,對位於特定索引的條目設置大小需要更新相關條目的位置,這又是一個線性計算。

與以上技巧相似,此類別內部保存一個套件含 N 個整數的陣列,但它使用混合編碼,這是介於基於大小和基於位置的方法之間一種折中方法。結果為一個資料結構,它存儲資訊需要相同大小的空間,但是執行大多數操作只需要 Log(N) 次,而不是 O(N) 次,N 是列表中的條目數。

有兩個操作還需要執行 O(N) 條目數次,它們就是 insertEntriesremoveEntries 方法,兩者的實作方法都是將內部陣列轉換為一組整數大小,將它複製到新陣列,然後將混合表示形式重新正確歸位。

從以下版本開始:
1.3

建構子摘要
SizeSequence()
          創建一個新的 SizeSequence 物件,它不包含任何條目。
SizeSequence(int numEntries)
          創建一個新的 SizeSequence 物件,它包含指定的條目數,每個大小都已初始化為 0。
SizeSequence(int[] sizes)
          創建一個新的 SizeSequence 物件,它包含指定的大小。
SizeSequence(int numEntries, int value)
          創建一個新的 SizeSequence 物件,它包含指定的條目數,每個大小都已初始化為 value
 
方法摘要
 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 物件,它不包含任何條目。要添加條目,可使用 insertEntriessetSizes

另請參見:
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),依此類別推。

注意,如果 index 大於 length,返回的值可能無意義。

參數:
index - 位於期望位置的條目的索引
返回:
指定條目的起始位置

getIndex

public int getIndex(int position)
返回與指定位置對應的條目的索引。例如,由於第一個條目通常從位置 0 開始,getIndex(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 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only