java.lang.Object javax.swing.SizeSequence
public class SizeSequence
一个 SizeSequence
对象,它有效地维护一个包含大小和相应位置的顺序列表。有一种情况需要用到 SizeSequence
,即显示具有不同大小的多个行的组件。在这种情况下,用一个单独的 SizeSequence
对象可跟踪所有行的高度和 Y 位置。
另一个例子是包含多列的组件,比如 JTable
,它的各列大小不尽相同。JTable
可使用一个单独的 SizeSequence
对象来存储所有列的宽度和 X 位置。然后,JTable
可以使用 SizeSequence
对象来查找与特定位置对应的列。只要有一列或多列大小发生更改,JTable
就会更新该 SizeSequence
对象。
下图显示了多列组件中大小和位置数据之间的关系。
在上图中,第一个索引 (0) 对应第一列,第二个索引 (1) 对应第二列,依此类推。第一列位置从 0 开始,该列占据 size0 个像素,其中 size0 是 getSize(0)
返回的值。因此,第一列在 size0 - 1 位置结束。然后第二列从 size0 位置开始并占据 size1 (getSize(1)
) 个像素。
注意,SizeSequence
对象只代表轴上的间隔。在我们的示例中,间隔代表以像素为单位的高度或宽度。但是,任何其他测量单位(例如,时间单位为天)也同样有效。
getIndex(position)
和
setSize(index, size)
。无论选择哪种内部格式,当条目数变大时,这两个操作中每一个开销都很大。如果存储的是大小,查找位于特定位置的条目索引与条目数呈线性关系。反过来,如果存储的是位置,对位于特定索引的条目设置大小需要更新相关条目的位置,这又是一个线性计算。
与以上技巧相似,此类内部保存一个包含 N 个整数的数组,但它使用混合编码,这是介于基于大小和基于位置的方法之间一种折中方法。结果为一个数据结构,它存储信息需要相同大小的空间,但是执行大多数操作只需要 Log(N) 次,而不是 O(N) 次,N 是列表中的条目数。
有两个操作还需要执行 O(N) 条目数次,它们就是 insertEntries
和 removeEntries
方法,两者的实现方法都是将内部数组转换为一组整数大小,将它复制到新数组,然后将混合表示形式重新正确归位。
构造方法摘要 | |
---|---|
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 |
构造方法详细信息 |
---|
public SizeSequence()
SizeSequence
对象,它不包含任何条目。要添加条目,可使用
insertEntries
或
setSizes
。
public SizeSequence(int numEntries)
SizeSequence
对象,它包含指定的条目数,每个大小都已初始化为 0。
numEntries
- 要跟踪的大小数
NegativeArraySizeException
- 如果
numEntries < 0
public SizeSequence(int numEntries, int value)
SizeSequence
对象,它包含指定的条目数,每个大小都已初始化为
value
。
numEntries
- 要跟踪的大小数
value
- 每个大小的初始值
public SizeSequence(int[] sizes)
SizeSequence
对象,它包含指定的大小。
sizes
- 要包含在
SizeSequence
中的大小的数组
方法详细信息 |
---|
public void setSizes(int[] sizes)
sizes
参数中的数据重置此
SizeSequence
对象。该方法将此对象重新初始化,这样它可以包含与
sizes
数组一样多的条目。每个条目的大小都初始化为
sizes
中对应项的值。
sizes
- 要包含在此
SizeSequence
中的大小的数组
public int[] getSizes()
public int getPosition(int index)
getPosition(0)
返回 0,
getPosition(1)
与
getSize(0)
相等,
getPosition(2)
等于
getSize(0)
+
getSize(1)
,依此类推。
注意,如果 index
大于 length
,返回的值可能无意义。
index
- 位于期望位置的条目的索引
public int getIndex(int position)
getIndex(0)
为 0。
position
- 条目的位置
public int getSize(int index)
index
超出范围
(0 <= index < getSizes().length)
,则行为是未指定的。
index
- 与条目对应的索引
public void setSize(int index, int size)
index
值未落在如下范围:
(0 <= index < getSizes().length)
,则行为是未指定的。
index
- 与条目对应的索引
size
- 条目的大小
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)
public void removeEntries(int start, int length)
SizeSequence
中移除一组相邻的条目。注意,
start
和
length
的值必须满足如下条件:
(0 <= start < getSizes().length) AND (length >= 0)
。如果未满足这些条件,则行为未指定并且可能抛出异常。
start
- 要移除的第一个条目的索引
length
- 要移除的条目数