|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
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) 对应第一列,第二个索引 (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 |
构造方法详细信息 |
---|
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
- 要包含在此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
- 条目的位置- 返回:
- 占用指定位置的条目的索引