Класс ZoneView
- java.lang.Object
-
- javax.swing.text.View
-
- javax.swing.text.CompositeView
-
- javax.swing.text.BoxView
-
- javax.swing.text.ZoneView
- Все реализованные интерфейсы:
- SwingConstants
public class ZoneView extends BoxView
ZoneView — это реализация View, которая создает зоны, для которых дочерние представления не создаются и не хранятся до тех пор, пока они не потребуются для отображения или преобразований модель/представление. Это позволяет существенно уменьшить потребление памяти в ситуациях, когда представляемая модель очень большая, создавая объекты представлений только для области, которая активно просматривается/редактируется. Размер дочерних элементов можно каким-то образом оценить или рассчитать асинхронно, сохраняя только результат.
ZoneView расширяет BoxView, чтобы предоставить ящик, реализующий зоны для своих дочерних элементов. Зоны — это специальные реализации View (дочерние элементы экземпляра этого класса), представляющие только часть модели, за которую отвечает экземпляр ZoneView. Зоны не создают дочерние представления, пока не будет попытка их отобразить. Ящичная форма представления хорошо подходит для этого, потому что:
- Ящики — это широко используемое представление, и наличие ящика, предоставляющего это поведение, дает значительную возможность подключить это поведение к иерархии представлений из фабрики представлений.
- Ящики выкладываются в одном направлении, поэтому их легко разделить на зоны надежным способом.
- Ящики обычно имеют простые отношения с моделью (т. е. они создают дочерние представления, которые непосредственно представляют дочерние элементы).
- Ящики легче оценить по размеру, чем некоторые другие формы.
Поведение по умолчанию контролируется двумя свойствами: maxZoneSize и maxZonesLoaded. Установка maxZoneSize в Integer.MAX_VALUE приведет к созданию только одной зоны. Это фактически превратит представление в реализацию паттерна декоратор. Установка maxZonesLoaded в значение Integer.MAX_VALUE приведет к тому, что зоны никогда не будут разгружаться. Для простоты зоны создаются на границах, представленных дочерними элементами элемента, за который отвечает представление. Зоны могут быть любой реализацией View, но реализация по умолчанию основана на AsyncBoxView, которая эффективно поддерживает довольно большие зоны.
- С момента:
- 1.3
- См. также:
View
Поля
Поля, унаследованные от класса javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS Поля, унаследованные от интерфейса javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST Конструкторы
| Конструктор и описание |
|---|
ZoneView(Element elem,
int axis) Конструктор ZoneView. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
protected View |
createZone(int p0,
int p1) Создать представление для отображения зоны для заданного диапазона в модели (который должен находиться в диапазоне ответственности этого объекта). |
int |
getMaximumZoneSize() Получить текущий максимальный размер зоны. |
int |
getMaxZonesLoaded() Получить текущее значение количества зон, которые разрешается загружать одновременно. |
protected int |
getViewIndexAtPosition(int pos) Возвращает индекс дочернего представления, представляющий заданную позицию в модели. |
void |
insertUpdate(DocumentEvent changes,
Shape a,
ViewFactory f) Уведомление о вставке чего-либо в документ в место, за которое отвечает это представление. |
protected boolean |
isZoneLoaded(View zone) Определяет, находится ли зона в загруженном состоянии. |
protected void |
loadChildren(ViewFactory f) Загружает все дочерние элементы для инициализации представления. |
void |
removeUpdate(DocumentEvent changes,
Shape a,
ViewFactory f) Уведомление об удалении чего-либо из документа в место, за которое отвечает это представление. |
void |
setMaximumZoneSize(int size) Установить желаемый максимальный размер зоны. |
void |
setMaxZonesLoaded(int mzl) Устанавливает текущее значение количества зон, которые разрешается загружать одновременно. |
protected void |
unloadZone(View zone) Разгрузить зону (перевести зону в состояние экономии памяти). |
protected boolean |
updateChildren(DocumentEvent.ElementChange ec,
DocumentEvent e,
ViewFactory f) Метод суперкласса попытается обновить дочерние представления, что в данном случае нежелательно, так как дочерние элементы — это зоны, а не непосредственно затронутые изменениями в связанном элементе. |
protected void |
zoneWasLoaded(View zone) Вызывается зоной при загрузке. |
Методы, унаследованные от класса javax.swing.text.BoxView
baselineLayout, baselineRequirements, calculateMajorAxisRequirements, calculateMinorAxisRequirements, childAllocation, flipEastAndWestAtEnds, forwardUpdate, getAlignment, getAxis, getChildAllocation, getHeight, getMaximumSpan, getMinimumSpan, getOffset, getPreferredSpan, getResizeWeight, getSpan, getViewAtPoint, getWidth, isAfter, isAllocationValid, isBefore, isLayoutValid, layout, layoutChanged, layoutMajorAxis, layoutMinorAxis, modelToView, paint, paintChild, preferenceChanged, replace, setAxis, setSize, viewToModel Методы, унаследованные от класса javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, modelToView, setInsets, setParagraphInsets, setParent Методы, унаследованные от класса javax.swing.text.View
append, breakView, changedUpdate, createFragment, forwardUpdateToView, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, isVisible, modelToView, remove, removeAll, updateLayout, viewToModel Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
ZoneView
public ZoneView(Element elem,
int axis) Создаёт ZoneView.
- Параметры:
-
elem- элемент, за который отвечает эта область просмотра -
axis- либо View.X_AXIS, либо View.Y_AXIS
Методы
getMaximumZoneSize
public int getMaximumZoneSize()
Получить текущий максимальный размер области.
setMaximumZoneSize
public void setMaximumZoneSize(int size)
Установить желаемый максимальный размер области. Область может быть больше этого размера, если отдельный дочерний вид больше этого размера, поскольку зоны формируются на границах дочерних видов.
- Параметры:
-
size- количество символов, которые может представлять зона, прежде чем пытаться разбить зону на меньший размер.
getMaxZonesLoaded
public int getMaxZonesLoaded()
Получить текущую установку количества зон, разрешённых для загрузки одновременно.
setMaxZonesLoaded
public void setMaxZonesLoaded(int mzl)
Устанавливает текущую установку количества зон, разрешённых для загрузки одновременно. Это выбросит IllegalArgumentException, если mzl меньше 1.
- Параметры:
-
mzl- желаемое максимальное количество зон для активной загрузки, должно быть больше 0 - Исключения:
-
IllegalArgumentException- еслиmzlменьше 1
zoneWasLoaded
protected void zoneWasLoaded(View zone)
Вызывается зоной, когда она загружается. Это происходит, когда делается попытка отобразить или выполнить преобразование модель/представление для зоны, которая была в незагруженном состоянии. Это реализуется для проверки, достигнуто ли максимальное количество зон, и для разгрузки старейшей зоны в случае необходимости.
- Параметры:
-
zone- дочерний вид, который только что был загружен.
unloadZone
protected void unloadZone(View zone)
Разгрузить область (перевести область в её состояние экономии памяти). Ожидается, что зоны будут представлять подмножество дочерних элементов элемента, за который отвечает эта область просмотра. Поэтому реализация по умолчанию — просто удалить все дочерние элементы.
- Параметры:
-
zone- дочерний вид, который требуется установить в незагруженное состояние.
isZoneLoaded
protected boolean isZoneLoaded(View zone)
Определить, находится ли зона в загруженном состоянии. Ожидается, что зоны будут представлять подмножество дочерних элементов элемента, за который отвечает эта область просмотра. Поэтому реализация по умолчанию возвращает true, если вид имеет дочерние элементы.
createZone
protected View createZone(int p0,
int p1) Создать вид для представления зоны для данного диапазона в модели (который должен находиться в диапазоне ответственности этого объекта). Это вызывается логикой управления зонами для создания новых зон. Подклассы могут обеспечить другую реализацию зоны, изменив этот метод.
- Параметры:
-
p0- начало желаемой зоны. Это должно быть >= getStartOffset() и < getEndOffset(). Это значение также должно быть < p1. -
p1- конец желаемой зоны. Это должно быть > getStartOffset() и <= getEndOffset(). Это значение также должно быть > p0.
loadChildren
protected void loadChildren(ViewFactory f)
Загружает все дочерние элементы для инициализации вида. Это вызывается методом setParent. Это переопределяется, чтобы не загружать дочерние элементы напрямую (поскольку они создаются зонами). Этот метод создаёт начальный набор зон. Однако зоны фактически не заполняются до тех пор, пока не будет попытки отобразить их или выполнить преобразование координат модель/представление.
- Переопределяет:
-
loadChildrenв классеCompositeView - Параметры:
-
f- фабрика видов - См. также:
CompositeView.setParent(javax.swing.text.View)
getViewIndexAtPosition
protected int getViewIndexAtPosition(int pos)
Возвращает индекс дочернего вида, представляющий данную позицию в модели.
- Переопределяет:
-
getViewIndexAtPositionв классеCompositeView - Параметры:
-
pos- позиция >= 0 - Возвращает:
- индекс вида, представляющий заданную позицию, или -1, если ни один вид не представляет эту позицию
updateChildren
protected boolean updateChildren(DocumentEvent.ElementChange ec,
DocumentEvent e,
ViewFactory f) Поведение суперкласса попытается обновить дочерние виды, что в этом случае нежелательно, поскольку дочерние элементы — это зоны, а не непосредственно затронутые изменениями связанного элемента. Это переопределяется, чтобы ничего не делать и вернуть false.
- Переопределяет:
-
updateChildrenв классеView - Параметры:
-
ec- информация о изменениях для элемента, за который отвечает эта область просмотра. Это не должно бытьnullесли этот метод вызывается -
e- информация о изменениях из связанного документа -
f- фабрика для создания дочерних видов - Возвращает:
- являются ли дочерние виды представлениями дочерних элементов элемента, за который отвечает эта область просмотра. Некоторые виды создают дочерние элементы, которые представляют часть элемента, за который они отвечают, и должны возвращать false. Эта информация используется для определения, должны ли виды в диапазоне добавленных элементов быть переданы или нет
- См. также:
-
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory),View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory),View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
insertUpdate
public void insertUpdate(DocumentEvent changes,
Shape a,
ViewFactory f) Предоставляет уведомление о том, что что-то было вставлено в документ в месте, за которое отвечает этот вид. В основном делегируется суперклассу, но переопределяется для обновления соответствующей зоны (т.е. определения, нужна ли зона разделена на 2 или более зон).
- Переопределяет:
-
insertUpdateв классеView - Параметры:
-
changes- информация о изменениях из связанного документа -
a- текущее выделение вида -
f- фабрика для повторного построения, если вид имеет дочерние элементы - См. также:
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
removeUpdate
public void removeUpdate(DocumentEvent changes,
Shape a,
ViewFactory f) Предоставляет уведомление о том, что что-то было удалено из документа в месте, за которое отвечает этот вид. В основном делегируется суперклассу, но переопределяется для обновления соответствующих зон (т.е. определения, нужно ли удалить зоны или объединить их с другой зоной).
- Переопределяет:
-
removeUpdateв классеView - Параметры:
-
changes- информация о изменениях из связанного документа -
a- текущее выделение вида -
f- фабрика для повторного построения, если вид имеет дочерние элементы - См. также:
View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
© 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.