- java.lang.Object
-
- javax.swing.SizeSequence
-
public class SizeSequence extends Object
SizeSequence
对象有效地维护大小和相应位置的有序列表。SizeSequence
可能适合的一种情况是在显示多行不等大小的组件中。 在这种情况下,可以使用单个SizeSequence
对象来跟踪所有行的高度和Y位置。另一个例子是多列组件,例如
JTable
,其中列大小并非全部相等。JTable
可能使用单个SizeSequence
对象来存储所有列的宽度和X位置。 然后,JTable
可以使用SizeSequence
对象查找与某个位置对应的列。 只要更改了一个或多个列大小,JTable
就可以更新SizeSequence
对象。下图显示了多列组件的大小和位置数据之间的关系。
在该图中,第一个索引(0)对应于第一列,第二个索引(1)对应于第二列,依此类推。 第一列的位置从0开始,列占用0像素大小 ,其中大小0是
getSize(0)
返回的值。 因此,第一列结束于大小0 - 1。第二柱然后开始在该位置大小0并占据大小1(getSize(1)
)的像素。请注意,
SizeSequence
对象仅表示沿轴的间隔。 在我们的示例中,间隔表示高度或宽度(以像素为单位)。 但是,任何其他度量单位(例如,以天为单位的时间)都可以同样有效。实施说明
通常,当存储条目的大小和位置时,可以选择存储大小或存储它们的位置。 渲染期间需要的两个常见操作是:getIndex(position)
和setSize(index, size)
。 无论选择何种内部格式,当条目数量变大时,这些操作之一的成本都很高。 如果存储了大小,则查找包含特定位置的条目的索引在条目数中是线性的。 如果存储位置,则在特定索引处设置条目的大小需要更新受影响条目的位置,这也是线性计算。与上述技术一样,此类在内部保存N个整数数组,但使用混合编码,该编码位于基于大小和基于位置的方法之间。 结果是一个数据结构,它占用相同的空间来存储信息,但可以在Log(N)时间而不是O(N)中执行大多数操作,其中N是列表中的条目数。
在条目数中保留O(N)的两个操作是
insertEntries
和removeEntries
方法,这两种方法都是通过将内部数组转换为一组整数大小,将其复制到新数组,然后重组混合表示来实现的。到位。- 从以下版本开始:
- 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
对象。
-
-
-
构造方法详细信息
-
SizeSequence
public SizeSequence()
创建一个不包含任何条目的新SizeSequence
对象。 要添加条目,可以使用insertEntries
或setSizes
。
-
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
。- 参数
-
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)
返回与指定位置对应的条目的索引。 例如,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
添加一组连续的条目。 请注意,start
和length
的值必须满足以下条件:(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
删除一组连续的条目。 请注意,start
和length
的值必须满足以下条件:(0 <= start < getSizes().length) AND (length >= 0)
。 如果不满足这些条件,则行为未指定,并且可能抛出异常。- 参数
-
start
- 要删除的第一个条目的索引 -
length
- 要删除的条目数
-
-