Класс 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, если у представления есть дочерние элементы. zone - дочернее представление
- Параметры:
-
zone- зона - Возвращает:
- находится ли зона в загруженном состоянии или нет.
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/text/ZoneView.html