Класс StyledTextModel
- Прямые известные подклассы:
-
BasicTextModel,RichTextModel,StyledTextModelViewOnlyBase
public abstract class StyledTextModel extends Object
RichTextArea. Этот класс отвечает за следующие функции, чтобы упростить создание пользовательских моделей:
- управление слушателями
- вызов событий
- разбиение изменений на несколько операций над отдельными абзацами
- управление
Marker
Редактирование
Модель поддерживает редактирование, когда методisWritable() возвращает true. Три метода участвуют в изменении содержимого: replace(StyleResolver, TextPos, TextPos, String, boolean), replace(StyleResolver, TextPos, TextPos, StyledInput, boolean), applyStyle(TextPos, TextPos, StyleAttributeMap, boolean). Эти методы декомпозируют основное изменение на операции с отдельными абзацами и делегируют их подклассам. В конце этого процесса всем StyledTextModel.Listener отправляется событие, после чего кожа запрашивает обновленные абзацы по мере необходимости.
Создание абзаца
Модель предоставляет содержимое представлению(ям) через неизменяемыеRichParagraph. Существует два способа добавления стилей в модель: - Использование имен стилей в стиле или встроенных стилей (пример:
"-fx-font-size:200%;"), или - Использование атрибутов, определенных в
StyleAttributeMap, таких как жирный шрифт, курсив и т. д. В этом случае внешний вид полученного абзаца отвязан от таблицы стилей и будет выглядеть одинаково независимо от активной таблицы стилей.
Расширение модели
Подклассы могут свободно выбирать, как хранятся данные, единственное ограничение заключается в том, что модель не хранит и не кэширует какие-либоNode, так как к одной модели могут быть прикреплены несколько кожных слоёв. При необходимости модель может содержать свойства, которые могут быть связаны с узлами, созданными в getParagraph(int). Ответственность модели заключается в хранении и восстановлении значений таких свойств.- С тех пор:
- 24
Краткое описание вложенных классов
| Modifier and Type | Class | Description |
|---|---|---|
static interface |
StyledTextModel.Listener |
Получает информацию о модификациях модели. |
Краткое описание свойств
| Type | Свойство | Description |
|---|---|---|
final ReadOnlyBooleanProperty |
redoable |
Свойство описывает, возможно ли сейчас выполнить повторное действие последнего отменённого изменения содержимого. |
final ReadOnlyBooleanProperty |
undoable |
Свойство описывает, возможно ли сейчас отменить последнее внесённое изменение содержимого. |
Краткое описание конструкторов
| Конструктор | Description |
|---|---|
StyledTextModel() |
Создаёт экземпляр модели. |
Краткое описание методов
| Modifier and Type | Метод | Description |
|---|---|---|
final void |
addListener |
Добавляет StyledTextModel.Listener в эту модель. |
protected abstract void |
applyStyle |
Применяет стиль к указанному диапазону текста в рамках одного абзаца. |
final void |
applyStyle |
Применяет атрибуты стиля к указанному диапазону в документе. |
final TextPos |
clamp |
Возвращает позицию текста, гарантированно находящуюся в пределах документа и абзаца. |
final void |
clearUndoRedo() |
Очищает стек отмены-повторного применения изменений. |
final void |
export |
Экспортирует поток StyledSegment в заданном диапазоне в указанный StyledOutput. |
protected final void |
exportParagraph |
Экспортирует часть абзаца как последовательность стилизованных сегментов. |
void |
fireChangeEvent |
Вызывает событие изменения текста для заданного диапазона. |
void |
fireStyleChangeEvent |
Вызывает событие изменения стиля для заданного диапазона. |
final DataFormatHandler |
getDataFormatHandler |
Возвращает экземпляр DataFormatHandler, соответствующий заданному DataFormat. |
final TextPos |
getDocumentEnd() |
Возвращает позицию текста, соответствующую концу документа. |
final TextPos |
getEndOfParagraphTextPos |
Возвращает TextPos, соответствующий концу абзаца в заданном индексе. |
final Marker |
getMarker |
Возвращает Marker в заданной позиции. |
abstract RichParagraph |
getParagraph |
Возвращает RichParagraph по заданному индексу модели. |
int |
getParagraphLength |
Возвращает длину текста в абзаце по заданному индексу. |
abstract String |
getPlainText |
Возвращает строку простого текста для указанного абзаца. |
abstract StyleAttributeMap |
getStyleAttributeMap |
Возвращает StyleAttributeMap символа в указанной позиции. |
protected Set |
getSupportedAttributes() |
Возвращает набор поддерживаемых атрибутов. |
final List |
getSupportedDataFormats |
Возвращает неизменяемый список поддерживаемых форматов данных для операций экспорта или импорта в порядке приоритета - от высокого к низкому. |
protected abstract void |
insertLineBreak |
Вставляет символ переноса строки в указанную позицию. |
protected abstract void |
insertParagraph |
Вставляет абзац, содержащий один Region. |
protected abstract int |
insertTextSegment |
Этот метод используется для вставки одного стилизованного сегмента текста в заданной позиции. |
final boolean |
isRedoable() |
Возвращает значение свойства redoable. |
final boolean |
isUndoable() |
Возвращает значение свойства undoable. |
abstract boolean |
isWritable() |
Указывает, поддерживает ли модель изменения содержимого, выполненные с помощью методов applyStyle(), replace(), undo(), redo(). |
final void |
read |
Заменяет содержимое модели данными, считанными из входного потока, используя указанный DataFormat. |
final TextPos[] |
redo |
Повторяет последнее изменение, если возможно, возвращая массив, содержащий позиции текста [start, end] до изменения. |
final ReadOnlyBooleanProperty |
redoableProperty() |
Свойство описывает, возможно ли сейчас выполнить повторное действие последнего отменённого изменения содержимого. |
protected final void |
registerDataFormatHandler |
Регистрирует обработчик формата для операций экспорта и/или импорта. |
protected final void |
removeDataFormatHandler |
Удаляет ранее зарегистрированный обработчик формата с помощью registerDataFormatHandler(DataFormatHandler, boolean, boolean, int). |
final void |
removeListener |
Удаляет StyledTextModel.Listener из этой модели. |
protected abstract void |
removeRange |
Удаляет указанный диапазон текста. |
final TextPos |
replace |
Заменяет заданный диапазон предоставленным простым текстом. |
final TextPos |
replace |
Заменяет заданный диапазон предоставленным стилизованным текстом. |
protected abstract void |
setParagraphStyle |
Заменяет стили абзаца в указанном абзаце. |
abstract int |
size() |
Возвращает количество абзацев в модели. |
final TextPos[] |
undo |
Отменяет последнее изменение, если возможно, возвращая массив, содержащий позиции текста [start, end] до изменения. |
final ReadOnlyBooleanProperty |
undoableProperty() |
Свойство описывает, возможно ли сейчас отменить последнее внесённое изменение содержимого. |
final void |
write |
Записывает содержимое модели в выходной поток, используя указанный DataFormat. |
Подробности свойств
undoable
public final ReadOnlyBooleanProperty undoableProperty
- Значение по умолчанию:
- false
- См. также:
redoable
public final ReadOnlyBooleanProperty redoableProperty
- Значение по умолчанию:
- false
- См. также:
Подробности конструкторов
StyledTextModel
public StyledTextModel()
Этот конструктор регистрирует обработчики данных для RTF, HTML (только экспорт) и простого текста.
Подробности методов
isWritable
public abstract boolean isWritable()
applyStyle(), replace(), undo(), redo(). Обратите внимание, что даже если этот метод возвращает false, сама модель может всё ещё обновлять своё содержимое и генерировать события изменения в ответ, например, на изменения в хранилище данных.
- Возвращает:
- true, если модель поддерживает изменения содержимого
size
public abstract int size()
- Возвращает:
- количество абзацев
getPlainText
public abstract String getPlainText(int index)
index находится в допустимом диапазоне документа, так как в противном случае это может привести к исключению или неопределённому поведению.- Параметры:
-
index- индекс абзаца в диапазоне (0...size()) - Возвращает:
- строку текста абзаца, не равную null
getParagraph
public abstract RichParagraph getParagraph(int index)
RichParagraph по заданному индексу модели. Вызывающий код должен убедиться, что значение index находится в допустимом диапазоне документа, так как в противном случае это может привести к исключению или неопределённому поведению. Этот метод не гарантирует, что для одного и того же индекса модели будет возвращён тот же экземпляр абзаца.
- Параметры:
-
index- индекс абзаца в диапазоне (0...size()) - Возвращает:
- экземпляр
RichParagraph
removeRange
protected abstract void removeRange(TextPos start, TextPos end)
start предшествует end.- Параметры:
-
start- начало удаляемого диапазона -
end- конец удаляемого диапазона, ожидается, что он больше начальной позиции - Исключения:
-
UnsupportedOperationException- если модель неwritable
insertTextSegment
protected abstract int insertTextSegment(int index, int offset, String text, StyleAttributeMap attrs)
- Параметры:
-
index- индекс абзаца -
offset- смещение вставки внутри абзаца -
text- текст для вставки -
attrs- атрибуты стиля - Возвращает:
- количество вставленных символов
- Исключения:
-
UnsupportedOperationException- если модель неwritable
insertLineBreak
protected abstract void insertLineBreak(int index, int offset)
- Параметры:
-
index- индекс модели -
offset- смещение текста - Исключения:
-
UnsupportedOperationException- если модель неwritable
insertParagraph
protected abstract void insertParagraph(int index, Supplier<Region> generator)
Region. Модель не должна кэшировать или каким-либо образом сохранять ссылки на созданные Region, так как они могут запрашиваться многократно в течение жизненного цикла модели или разными представлениями.
Этот метод позволяет встраивать Control, которые обрабатывают пользовательский ввод. В этом случае модель должна объявлять необходимые свойства и обеспечивать двусторонние привязки между свойствами в модели и соответствующими свойствами в элементе управления, а также обрабатывать копирование, вставку, запись в и чтение из потоков ввода-вывода.
- Параметры:
-
index- индекс модели -
generator- код, который будет использован для создания экземпляра Node - Исключения:
-
UnsupportedOperationException- если модель неwritable
setParagraphStyle
protected abstract void setParagraphStyle(int index, StyleAttributeMap paragraphAttrs)
- Параметры:
-
index- индекс абзаца -
paragraphAttrs- атрибуты абзаца - Исключения:
-
UnsupportedOperationException- если модель неwritable
applyStyle
protected abstract void applyStyle(int index, int start, int end, StyleAttributeMap a, boolean merge)
end может превышать длину абзаца, в этом случае результат должен быть таким же, как при передаче значения длины абзаца.- Параметры:
-
index- индекс абзаца -
start- начальное смещение -
end- конечное смещение -
a- атрибуты символов -
merge- определяет, сливать или переопределять существующие атрибуты - Исключения:
-
UnsupportedOperationException- если модель неwritable
getStyleAttributeMap
public abstract StyleAttributeMap getStyleAttributeMap(StyleResolver resolver, TextPos pos)
StyleAttributeMap символа в заданной позиции charIndex. При достижении конца документа возвращает атрибуты последнего символа.- Параметры:
-
resolver- разрешитель стиля -
pos- позиция текста - Возвращает:
- атрибуты стиля, не null
getSupportedAttributes
protected Set<StyleAttribute<?>> getSupportedAttributes()
Методы, использующие фильтрацию: applyStyle(TextPos, TextPos, StyleAttributeMap, boolean), replace(StyleResolver, TextPos, TextPos, StyledInput, boolean) и replace(StyleResolver, TextPos, TextPos, String, boolean).
Если этот метод возвращает null, фильтрация не выполняется.
Этот метод может быть переопределён определёнными моделями. Реализация базового класса возвращает null.
- Возвращает:
- набор поддерживаемых атрибутов или null, если модель не требует фильтрации
addListener
public final void addListener(StyledTextModel.Listener listener)
StyledTextModel.Listener в эту модель.- Parameters:
-
listener- ненулевой слушатель
removeListener
public final void removeListener(StyledTextModel.Listener listener)
StyledTextModel.Listener из этой модели. Этот метод ничего не делает, если этот слушатель никогда не добавлялся.
- Parameters:
-
listener- ненулевой слушатель
registerDataFormatHandler
protected final void registerDataFormatHandler(DataFormatHandler h, boolean forExport, boolean forImport, int priority)
Clipboard, когда входные данные доступны в более чем одном поддерживаемом формате. Обработчик с наивысшим приоритетом будет использоваться методами RichTextArea.read(InputStream) и RichTextArea.write(OutputStream). Один и тот же обработчик может быть зарегистрирован для импорта и экспорта. При регистрации нескольких обработчиков для одного и того же обработчика данных и импорта/экспорта последний зарегистрированный обработчик имеет преимущество.
Ожидается, что этот метод будет вызываться из конструктора потомка StyledTextModel.
- Parameters:
-
h- обработчик формата данных -
forExport- true, если обработчик поддерживает операции экспорта -
forImport- true, если обработчик поддерживает операции импорта -
priority- от 0 (наименьший, обычно обычный текст) доInteger.MAX_VALUE
removeDataFormatHandler
protected final void removeDataFormatHandler(DataFormat f, boolean forExport, boolean forImport)
registerDataFormatHandler(DataFormatHandler, boolean, boolean, int).- Parameters:
-
f- формат данных -
forExport- нужно ли удалить обработчик экспорта -
forImport- нужно ли удалить обработчик импорта
getSupportedDataFormats
public final List<DataFormat> getSupportedDataFormats(boolean forExport)
Формат с наивысшим приоритетом будет использоваться методами RichTextArea.read(InputStream) и RichTextArea.write(OutputStream).
- Parameters:
-
forExport- определяет, является ли операция экспортом (true) или импортом (false) - Returns:
- неизменяемый список поддерживаемых форматов
getDataFormatHandler
public final DataFormatHandler getDataFormatHandler(DataFormat format, boolean forExport)
DataFormatHandler, соответствующий заданному DataFormat. Этот метод вернет null, если формат данных не поддерживается.- Parameters:
-
format- формат данных -
forExport- для экспорта (true) или для импорта (false) - Returns:
- DataFormatHandler или null
fireChangeEvent
public void fireChangeEvent(TextPos start, TextPos end, int charsTop, int linesAdded, int charsBottom)
- Parameters:
-
start- начало затронутого диапазона -
end- конец затронутого диапазона -
charsTop- количество добавленных символов перед любыми добавленными абзацами -
linesAdded- количество вставленных абзацев -
charsBottom- количество добавленных символов после любых вставленных абзацев
fireStyleChangeEvent
public void fireStyleChangeEvent(TextPos start, TextPos end)
- Parameters:
-
start- начальная позиция -
end- конечная позиция, должна быть больше начальной позиции
getParagraphLength
public int getParagraphLength(int index)
- Parameters:
-
index- индекс абзаца - Returns:
- длина
export
public final void export(TextPos start, TextPos end, StyledOutput out) throws IOException
StyledSegment в заданном диапазоне в указанный StyledOutput. Этот метод не закрывает StyledOutput.- Parameters:
-
start- начало диапазона -
end- конец диапазона -
out-StyledOutputдля получения потока - Throws:
-
IOException- при возникновении ошибки ввода-вывода - See Also:
exportParagraph
protected final void exportParagraph(int index, int start, int end, boolean withParAttrs, StyledOutput out) throws IOException
- Parameters:
-
index- индекс абзаца в модели -
start- начальный смещение -
end- конечный смещение (может превышать длину абзаца) -
withParAttrs- определяет, нужно ли выводить атрибуты абзаца -
out- целевой StyledOutput - Throws:
-
IOException- при возникновении ошибки ввода-вывода
getMarker
public final Marker getMarker(TextPos pos)
Marker в указанной позиции. Фактическая позиция текста, отслеживаемая маркером, всегда будет находиться в границах документа.- Parameters:
-
pos- позиция текста - Returns:
- экземпляр Marker
clamp
public final TextPos clamp(TextPos p)
- Parameters:
-
p- позиция текста, не может быть null - Returns:
- позиция текста в пределах документа и абзаца
getDocumentEnd
public final TextPos getDocumentEnd()
TextPos.ZERO.- Returns:
- позиция текста
- See Also:
getEndOfParagraphTextPos
public final TextPos getEndOfParagraphTextPos(int index)
- Parameters:
-
index- индекс абзаца - Returns:
- позиция текста
заменить
public final TextPos replace(StyleResolver resolver, TextPos start, TextPos end, String text, boolean allowUndo)
Это удобный метод, который в конечном итоге вызывает replace(StyleResolver, TextPos, TextPos, StyledInput, boolean) с атрибутами, предоставленными getStyleAttributeMap(StyleResolver, TextPos) в позиции start.
- Параметры:
-
resolver- используемый StyleResolver -
start- начальная позиция текста -
end- конечная позиция текста -
text- строка текста для вставки -
allowUndo- если true, создаёт запись отмены-повтор - Возвращает:
- позицию текста в конце вставленного текста или null, если модель является только для чтения
- Исключение:
-
UnsupportedOperationException- если модель неwritable
заменить
public final TextPos replace(StyleResolver resolver, TextPos start, TextPos end, StyledInput input, boolean allowUndo)
После того, как модель применит запрошенные изменения, всем зарегистрированным слушателям отправляется событие.
- Параметры:
-
resolver- используемый StyleResolver, может быть null -
start- начальная позиция текста -
end- конечная позиция текста -
input- входной поток содержимого -
allowUndo- если true, создаёт запись отмены-повтор - Возвращает:
- позицию текста в конце вставленного текста или null, если модель является только для чтения
- Исключение:
-
UnsupportedOperationException- если модель неwritable
применитьСтиль
public final void applyStyle(TextPos start, TextPos end, StyleAttributeMap attrs, boolean mergeAttributes)
В зависимости от параметра mergeAttributes, атрибуты будут либо объединены (true) с существующими, либо полностью заменят их в диапазоне. Затронутый диапазон может быть шире, чем указанный при применении атрибутов абзаца.
Эта операция отменяема.
- Параметры:
-
start- начало диапазона текста -
end- конец диапазона текста -
attrs- атрибуты стиля для установки -
mergeAttributes- объединять или заменять атрибуты - Исключение:
-
UnsupportedOperationException- если модель неwritable
очиститьОтменуПовтор
public final void clearUndoRedo()
отменить
public final TextPos[] undo(StyleResolver resolver)
- Параметры:
-
resolver- используемый StyleResolver - Возвращает:
- массив [начало, конец] позиций текста до изменения
- Исключение:
-
UnsupportedOperationException- если модель неwritable
повторить
public final TextPos[] redo(StyleResolver resolver)
- Параметры:
-
resolver- используемый StyleResolver - Возвращает:
- массив [начало, конец] позиций текста до изменения
- Исключение:
-
UnsupportedOperationException- если модель неwritable
свойствоОтменяемо
public final ReadOnlyBooleanProperty undoableProperty()
- Значение по умолчанию:
- false
- Возвращает:
- только для чтения свойство
- См. также:
можноОтменить
public final boolean isUndoable()
undoable.- Описание свойства:
- Свойство описывает, возможно ли в данный момент отменить последнее изменение содержимого.
- Значение по умолчанию:
- false
- Возвращает:
- значение свойства
undoable - См. также:
свойствоПовторяемо
public final ReadOnlyBooleanProperty redoableProperty()
- Значение по умолчанию:
- false
- Возвращает:
- только для чтения свойство
- См. также:
можноПовторить
public final boolean isRedoable()
redoable.- Описание свойства:
- Свойство описывает, возможно ли в данный момент повторить последнее отменённое изменение содержимого.
- Значение по умолчанию:
- false
- Возвращает:
- значение свойства
redoable - См. также:
чтение
public final void read(StyleResolver r, DataFormat f, InputStream input) throws IOException
DataFormat. Эта операция очищает стек отмены/повтора.- Параметры:
-
r- решатель стилей -
f- формат данных -
input- входной поток - Исключение:
-
IOException- в случае ошибки ввода/вывода -
UnsupportedOperationException- если формат данных не поддерживается моделью или модель неwritable
запись
public final void write(StyleResolver r, DataFormat f, OutputStream out) throws IOException
DataFormat.- Параметры:
-
r- решатель стилей -
f- формат данных -
out- выходной поток - Исключение:
-
IOException- в случае ошибки ввода/вывода -
UnsupportedOperationException- если формат данных не поддерживается моделью
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.