
Java^{TM} 2 Platform Std. Ed. v1.3 

PREV CLASS NEXT CLASS  FRAMES NO FRAMES  
SUMMARY: INNER  FIELD  CONSTR  METHOD  DETAIL: FIELD  CONSTR  METHOD 
java.lang.Object  +javax.swing.SizeSequence
A SizeSequence
object
efficiently maintains an ordered list
of sizes and corresponding positions.
One situation for which SizeSequence
might be appropriate
is in a component
that displays multiple rows of unequal size.
In this case, a single SizeSequence
object could be used
to track the heights
and Y positions
of all rows.
Another example would be a multicolumn component,
such as a JTable,
in which the column sizes are not all equal.
The JTable might use a single SizeSequence
object
to store the widths and X positions of all the columns.
The JTable could then use the SizeSequence
object
to find the column corresponding to a certain position.
The JTable could update the SizeSequence
object
whenever one or more column sizes changed.
The following figure shows the relationship between size and position data for a multicolumn component.
In the figure, the first index (0) corresponds to the first column,
the second index (1) to the second column, and so on.
The first column's position starts at 0,
and the column occupies size_{0} pixels,
where size_{0} is the value returned by
getSize(0)
.
Thus, the first column ends at size_{0}  1.
The second column then begins at
the position size_{0}
and occupies size_{1} (getSize(1)
) pixels.
Note that a SizeSequence
object simply represents intervals
along an axis.
In our examples, the intervals represent height or width in pixels.
However, any other unit of measure (for example, time in days)
could be just as valid.
getIndex(position)
and setSize(index, size)
.
Whichever choice of internal format is made one of these
operations is costly when the number of entries becomes large.
If sizes are stored, finding the index of the entry
that encloses a particular position is linear in the
number of entries. If positions are stored instead, setting
the size of an entry at a particular index requires updating
the positions of the affected entries, which is also a linear
calculation.
Like the above techniques this class holds an array of N integers internally but uses a hybrid encoding, which is halfway between the sizebased and positionalbased approaches. The result is a data structure that takes the same space to store the information but can perform most operations in Log(N) time instead of O(N), where N is the number of entries in the list.
Two operations that remain O(N) in the number of entries are
the insertEntries
and removeEntries
methods, both
of which are implemented by converting the internal array to
a set of integer sizes, copying it into the new array, and then
reforming the hybrid representation in place.
Constructor Summary  
SizeSequence()
Creates a new SizeSequence object
that contains no entries. 

SizeSequence(int numEntries)
Creates a new SizeSequence object
that contains the specified number of entries,
all initialized to have size 0. 

SizeSequence(int[] sizes)
Creates a new SizeSequence object
that contains the specified sizes. 

SizeSequence(int numEntries,
int value)
Creates a new SizeSequence object
that contains the specified number of entries,
all initialized to have size value . 
Method Summary  
int 
getIndex(int position)
Returns the index of the entry that corresponds to the specified position. 
int 
getPosition(int index)
Returns the start position for the specified entry. 
int 
getSize(int index)
Returns the size of the specified entry. 
int[] 
getSizes()
Returns the size of all entries. 
void 
insertEntries(int start,
int length,
int value)
Adds a contiguous group of entries to this SizeSequence . 
void 
removeEntries(int start,
int length)
Removes a contiguous group of entries from this SizeSequence . 
void 
setSize(int index,
int size)
Sets the size of the specified entry. 
void 
setSizes(int[] sizes)
Resets this SizeSequence object,
using the data in the sizes argument. 
Methods inherited from class java.lang.Object 
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 
Constructor Detail 
public SizeSequence()
SizeSequence
object
that contains no entries. To add entries, you
can use insertEntries
or setSizes
.insertEntries(int, int, int)
,
setSizes(int[])
public SizeSequence(int numEntries)
SizeSequence
object
that contains the specified number of entries,
all initialized to have size 0.numEntries
 the number of sizes to trackpublic SizeSequence(int numEntries, int value)
SizeSequence
object
that contains the specified number of entries,
all initialized to have size value
.numEntries
 the number of sizes to trackvalue
 the initial value of each sizepublic SizeSequence(int[] sizes)
SizeSequence
object
that contains the specified sizes.sizes
 the array of sizes to be contained in
the SizeSequence
Method Detail 
public void setSizes(int[] sizes)
SizeSequence
object,
using the data in the sizes
argument.
This method reinitializes
this object
so that it contains as many entries as the sizes
array.
Each entry's size is initialized
to the value of the corresponding
item in sizes
.sizes
 the array of sizes to be contained in
this SizeSequence
public int[] getSizes()
public int getPosition(int index)
getPosition(0)
returns 0,
getPosition(1)
is equal to
getSize(0)
,
getPosition(2)
is equal to
getSize(0)
+ getSize(1)
,
and so on.index
 the index of the entry whose position is desiredpublic int getIndex(int position)
getIndex(0)
is 0,
since the first entry always starts at position 0.position
 the position of the entrypublic int getSize(int index)
index
 the index corresponding to the entrypublic void setSize(int index, int size)
index
 the index corresponding to the entrysize
 the size of the entrypublic void insertEntries(int start, int length, int value)
SizeSequence
.start
 the index to be assigned to the first entry
in the grouplength
 the number of entries in the groupvalue
 the size to be assigned to each new entrypublic void removeEntries(int start, int length)
SizeSequence
.start
 the index of the first entry to be removedlength
 the number of entries to be removed

Java^{TM} 2 Platform Std. Ed. v1.3 

PREV CLASS NEXT CLASS  FRAMES NO FRAMES  
SUMMARY: INNER  FIELD  CONSTR  METHOD  DETAIL: FIELD  CONSTR  METHOD 
Java, Java 2D, and JDBC are trademarks or registered trademarks of Sun Microsystems, Inc. in the US and other countries.
Copyright 19932000 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.