Класс 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, оба из которых реализуются путём преобразования внутреннего массива в набор целочисленных размеров, копирования его в новый массив и затем преобразования гибридного представления на месте.
- Since:
- 1.3
Конструкторы
| Конструктор | Описание |
|---|---|
SizeSequence() | Создаёт новый объект |
SizeSequence(int numEntries) | Создаёт новый объект |
SizeSequence(int[] sizes) | Создаёт новый объект |
SizeSequence(int numEntries,
int value) | Создаёт новый объект |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
int | getIndex(int position) | Возвращает индекс элемента, соответствующего указанной позиции. |
int | getPosition(int index) | Возвращает начальную позицию для указанного элемента. |
int | getSize(int index) | Возвращает размер указанного элемента. |
int[] | getSizes() | Возвращает размер всех элементов. |
void | insertEntries(int start,
int length,
int value) | Добавляет непрерывную группу элементов в этот объект |
void | removeEntries(int start,
int length) | Удаляет непрерывную группу элементов из этого объекта |
void | setSize(int index,
int size) | Устанавливает размер указанного элемента. |
void | setSizes(int[] sizes) | Сбрасывает объект |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
SizeSequence
public SizeSequence()
Создаёт новый объект SizeSequence без элементов. Для добавления элементов используйте insertEntries или setSizes.
- См. также:
-
insertEntries(int, int, int),setSizes(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)
Сбрасывает этот объект 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- количество элементов для удаления
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/SizeSequence.html