Класс DefaultCaret
- Все реализованные интерфейсы:
FocusListener, MouseListener, MouseMotionListener, Shape, Serializable, Cloneable, EventListener, Caret
- Непосредственные известные подклассы:
BasicTextUI.BasicCaret
public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
Эта реализация ожидает два источника асинхронных уведомлений. Поток таймера срабатывает асинхронно и заставляет каретку просто перерисовать последнюю ограничивающую рамку. Каретка также отслеживает изменения при модификации документа. Обычно это происходит в потоке диспетчеризации событий в результате события мыши или клавиатуры. Поведение каретки при синхронных и асинхронных обновлениях документа определяется свойством UpdatePolicy. Перерисовка каретки в новом месте в любом случае выполняется в потоке событий, поскольку вызовы modelToView безопасны только в потоке событий.
Каретка выступает в роли слушателя мыши и фокуса для текстового компонента, в который она установлена, и определяет семантику каретки на основе этих событий. Методы слушателя можно переопределить, чтобы изменить эту семантику. По умолчанию для установки фокуса и положения каретки используется первая кнопка мыши. Перетаскивание указателя мыши с нажатой первой кнопкой выделяет непрерывный фрагмент модели. Если связанный текстовый компонент доступен для редактирования, каретка становится видимой при получении фокуса и невидимой при его потере.
По умолчанию для отображения выделения используется Highlighter, связанный с текстовым компонентом. Внешний вид выделения можно настроить, передав отрисовщик для подсветки. По умолчанию используется отрисовщик, отображающий сплошной цвет, указанный в свойстве SelectionColor связанного текстового компонента. Это можно легко изменить, переопределив метод getSelectionPainter.
Настроить внешний вид каретки можно, переопределив метод paint. Если метод paint изменен, следует также переопределить метод damage, чтобы вызвать перерисовку области, необходимой для отображения каретки. Каретка расширяет класс Rectangle, используемый для хранения ограничивающей рамки места последней отрисовки каретки. Это позволяет безопасно перерисовывать каретку в потоке при ее перемещении, не вызывая modelToView, который нестабилен между обновлениями модели и исправлением представления (то есть порядок доставки уведомлений DocumentListeners не гарантируется).
При изменении положения каретки ее магическое положение устанавливается в null. Для определения нового положения (после перемещения каретки) используется таймер. Когда таймер срабатывает, если магическое положение каретки по-прежнему равно null, оно сбрасывается в текущее положение каретки. Любые действия, изменяющие положение каретки и требующие сохранить магическое положение неизменным, должны запомнить магическое положение, изменить курсор, а затем восстановить исходное магическое положение. Преимущество этого подхода в том, что знать о магическом положении должны только действия, которым необходимо его сохранять (например, открытие/перемещение вниз).
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими выпусками Swing. Текущая поддержка сериализации предназначена для краткосрочного хранения или RMI между приложениями, работающими с одной и той же версией Swing. Начиная с версии 1.4, поддержка долгосрочного хранения всех JavaBeans добавлена в пакет java.beans. См. XMLEncoder.
- См. также:
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в классе Rectangle2D
Rectangle2D.Double, Rectangle2D.Float
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
ALWAYS_UPDATE |
Указывает, что положение каретки должно всегда обновляться в соответствии с изменениями документа независимо от того, выполняются ли обновления документа в потоке диспетчеризации событий. |
protected ChangeEvent |
changeEvent |
Событие изменения модели. |
protected EventListenerList |
listenerList |
Список слушателей событий. |
static final int |
NEVER_UPDATE |
Указывает, что каретка должна оставаться в том же абсолютном положении в документе независимо от любых обновлений документа, кроме случаев, когда длина документа становится меньше текущего положения каретки из-за удаления. |
static final int |
UPDATE_WHEN_ON_EDT |
Указывает, что положение каретки обновляется только при изменениях документа, выполняемых в потоке диспетчеризации событий. |
Поля, объявленные в классе Rectangle2D
OUT_BOTTOM, OUT_LEFT, OUT_RIGHT, OUT_TOP
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
DefaultCaret() |
Создает каретку по умолчанию. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addChangeListener |
Добавляет слушателя для отслеживания изменений положения каретки. |
protected void |
adjustVisibility |
При необходимости прокручивает связанное представление, чтобы каретка стала видимой. |
protected void |
damage |
Помечает область вокруг каретки для перерисовки в новом месте. |
void |
deinstall |
Вызывается при удалении пользовательского интерфейса из интерфейса JTextComponent. |
boolean |
equals |
Сравнивает этот объект с указанным объектом. |
protected void |
fireStateChanged() |
Уведомляет всех слушателей, зарегистрировавших интерес к уведомлениям о событиях этого типа. |
void |
focusGained |
Вызывается, когда компонент, содержащий каретку, получает фокус. |
void |
focusLost |
Вызывается, когда компонент, содержащий каретку, теряет фокус. |
int |
getBlinkRate() |
Возвращает частоту мигания каретки. |
ChangeListener[] |
getChangeListeners() |
Возвращает массив всех слушателей изменений, зарегистрированных для этой каретки. |
protected final JTextComponent |
getComponent() |
Возвращает текстовый компонент редактора, к которому привязана эта каретка. |
int |
getDot() |
Получает текущее положение каретки. |
Position.Bias |
getDotBias() |
Возвращает смещение положения каретки. |
<T extends EventListener> |
getListeners |
Возвращает массив всех объектов, зарегистрированных в данный момент как FooListener для этой каретки. |
Point |
getMagicCaretPosition() |
Получает сохраненное положение каретки. |
int |
getMark() |
Получает текущее положение метки. |
Position.Bias |
getMarkBias() |
Возвращает смещение метки. |
protected Highlighter.HighlightPainter |
getSelectionPainter() |
Получает отрисовщик для Highlighter. |
int |
getUpdatePolicy() |
Получает политику перемещения каретки при обновлении документа. |
void |
install |
Вызывается при установке пользовательского интерфейса в интерфейс JTextComponent. |
boolean |
isActive() |
Определяет, активна ли в данный момент каретка. |
boolean |
isSelectionVisible() |
Проверяет, видно ли текущее выделение. |
boolean |
isVisible() |
Указывает, видна ли в данный момент каретка. |
void |
mouseClicked |
Вызывается при щелчке мышью. |
void |
mouseDragged |
Перемещает каретку в соответствии с текущим положением указателя мыши. |
void |
mouseEntered |
Вызывается, когда указатель мыши входит в область. |
void |
mouseExited |
Вызывается, когда указатель мыши покидает область. |
void |
mouseMoved |
Вызывается при перемещении мыши. |
void |
mousePressed |
Если нажата кнопка 1, этот метод запрашивает фокус для связанного текстового компонента и устанавливает положение каретки. |
void |
mouseReleased |
Вызывается при отпускании кнопки мыши. |
protected void |
moveCaret |
Пытается переместить каретку в точку, заданную координатами события мыши, используя viewToModel(). |
void |
moveDot |
Перемещает каретку в указанное положение с прямым смещением. |
void |
moveDot |
Перемещает каретку в указанное положение с заданным смещением. |
void |
paint |
Отображает каретку в виде вертикальной линии. |
protected void |
positionCaret |
Пытается установить положение каретки по координатам события мыши, используя viewToModel(). |
void |
removeChangeListener |
Удаляет слушателя, отслеживавшего изменения положения каретки. |
protected final void |
repaint() |
Вызывает отрисовку каретки. |
void |
setBlinkRate |
Задает частоту мигания каретки. |
void |
setDot |
Устанавливает положение каретки и метки в указанное место с прямым смещением. |
void |
setDot |
Устанавливает положение каретки и метки в указанное место с заданным смещением. |
void |
setMagicCaretPosition |
Сохраняет текущее положение каретки. |
void |
setSelectionVisible |
Изменяет видимость выделения. |
void |
setUpdatePolicy |
Задает политику перемещения каретки при обновлении документа. |
void |
setVisible |
Устанавливает видимость каретки и перерисовывает ее. |
Методы, объявленные в классе Rectangle
add, add, add, contains, contains, contains, contains, createIntersection, createUnion, getBounds, getBounds2D, getHeight, getLocation, getSize, getWidth, getX, getY, grow, inside, intersection, intersects, isEmpty, move, outcode, reshape, resize, setBounds, setBounds, setLocation, setLocation, setRect, setSize, setSize, toString, translate, union
Методы, объявленные в классе Rectangle2D
add, add, add, contains, contains, getPathIterator, getPathIterator, hashCode, intersect, intersects, intersectsLine, intersectsLine, outcode, setFrame, setRect, union
Методы, объявленные в классе RectangularShape
clone, contains, contains, getCenterX, getCenterY, getFrame, getMaxX, getMaxY, getMinX, getMinY, intersects, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal
Методы, объявленные в интерфейсе Shape
contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects
Подробное описание полей
UPDATE_WHEN_ON_EDT
public static final int UPDATE_WHEN_ON_EDT
- Начиная с:
- 1.5
- См. также:
NEVER_UPDATE
public static final int NEVER_UPDATE
- Начиная с:
- 1.5
- См. также:
ALWAYS_UPDATE
public static final int ALWAYS_UPDATE
- Начиная с:
- 1.5
- См. также:
listenerList
protected EventListenerList listenerList
changeEvent
protected transient ChangeEvent changeEvent
Подробное описание конструкторов
DefaultCaret
public DefaultCaret()
Подробное описание методов
setUpdatePolicy
public void setUpdatePolicy(int policy)
BACKSPACE, абсолютная позиция каретки уменьшается из-за удаления символа перед ней. Иногда может быть полезно отключить обновление позиции каретки, чтобы она оставалась на той же абсолютной позиции в документе независимо от любых обновлений документа. Допускаются следующие политики обновления:
-
NEVER_UPDATE: каретка остается в той же абсолютной позиции в документе независимо от любых обновлений документа, за исключением случая, когда после удаления длина документа становится меньше текущей позиции каретки. В этом случае позиция каретки устанавливается в конец документа. При использовании этой политики каретка не пытается оставаться видимой, прокручивая связанное представление. -
ALWAYS_UPDATE: каретка всегда отслеживает изменения документа. При обычных изменениях ее позиция увеличивается, если вставка происходит до текущей позиции или в ней, и уменьшается, если удаление происходит перед текущей позицией. При обновлениях отмены и повтора действий каретка всегда перемещается в позицию, в которой произошло обновление. Каретка также пытается оставаться видимой, вызывая методadjustVisibility. -
UPDATE_WHEN_ON_EDT: действует какALWAYS_UPDATE, если обновления документа происходят в потоке диспетчеризации событий, и какNEVER_UPDATE, если обновления выполняются в другом потоке.
Значение свойства по умолчанию: UPDATE_WHEN_ON_EDT.
- Параметры:
-
policy— одно из следующих значений:UPDATE_WHEN_ON_EDT,NEVER_UPDATE,ALWAYS_UPDATE - Исключения:
-
IllegalArgumentException— если передано недопустимое значение - Начиная с:
- 1.5
- См. также:
getUpdatePolicy
public int getUpdatePolicy()
- Возвращает:
- одно из следующих значений:
UPDATE_WHEN_ON_EDT,NEVER_UPDATE,ALWAYS_UPDATE - Начиная с:
- 1.5
- См. также:
getComponent
protected final JTextComponent getComponent()
- Возвращает:
- компонент
repaint
protected final void repaint()
Этот метод потокобезопасен, хотя большинство методов Swing — нет. Дополнительные сведения см. в разделе Многопоточность в Swing.
damage
protected void damage(Rectangle r)
- Параметры:
-
r— текущее положение каретки - См. также:
adjustVisibility
protected void adjustVisibility(Rectangle nloc)
- Параметры:
-
nloc— новое положение для прокрутки
getSelectionPainter
protected Highlighter.HighlightPainter getSelectionPainter()
- Возвращает:
- средство отрисовки
positionCaret
protected void positionCaret(MouseEvent e)
- Параметры:
-
e— событие мыши
moveCaret
protected void moveCaret(MouseEvent e)
- Параметры:
-
e— событие мыши
focusGained
public void focusGained(FocusEvent e)
- Определено в:
-
focusGainedв интерфейсеFocusListener - Параметры:
-
e— событие фокуса - См. также:
focusLost
public void focusLost(FocusEvent e)
- Определено в:
-
focusLostв интерфейсеFocusListener - Параметры:
-
e— событие фокуса - См. также:
mouseClicked
public void mouseClicked(MouseEvent e)
- Определено в:
-
mouseClickedв интерфейсеMouseListener - Параметры:
-
e— событие мыши - См. также:
mousePressed
public void mousePressed(MouseEvent e)
- Определено в:
-
mousePressedв интерфейсеMouseListener - Параметры:
-
e— событие мыши - См. также:
mouseReleased
public void mouseReleased(MouseEvent e)
- Определено в:
-
mouseReleasedв интерфейсеMouseListener - Параметры:
-
e— событие мыши - См. также:
mouseEntered
public void mouseEntered(MouseEvent e)
- Определено в:
-
mouseEnteredв интерфейсеMouseListener - Параметры:
-
e— событие мыши - См. также:
mouseExited
public void mouseExited(MouseEvent e)
- Определено в:
-
mouseExitedв интерфейсеMouseListener - Параметры:
-
e— событие мыши - См. также:
mouseDragged
public void mouseDragged(MouseEvent e)
- Определено в:
-
mouseDraggedв интерфейсеMouseMotionListener - Параметры:
-
e— событие мыши - См. также:
mouseMoved
public void mouseMoved(MouseEvent e)
- Определено в:
-
mouseMovedв интерфейсеMouseMotionListener - Параметры:
-
e— событие мыши - См. также:
paint
public void paint(Graphics g)
Если в связанном документе присутствуют несколько направлений текста, будет отображен флаг, указывающий смещение каретки. Это происходит только в том случае, если связанный документ является подклассом AbstractDocument и в структуре двунаправленных элементов присутствуют несколько уровней двунаправленного текста (то есть текст имеет несколько направлений).
install
public void install(JTextComponent c)
deinstall
addChangeListener
public void addChangeListener(ChangeListener l)
- Определено в:
-
addChangeListenerв интерфейсеCaret - Параметры:
-
l— слушатель - См. также:
removeChangeListener
public void removeChangeListener(ChangeListener l)
- Определено в:
-
removeChangeListenerв интерфейсеCaret - Параметры:
-
l— слушатель - См. также:
getChangeListeners
public ChangeListener[] getChangeListeners()
- Возвращает:
- все
ChangeListenerэтой каретки или пустой массив, если слушатели изменений не зарегистрированы - Начиная с:
- 1.4
- См. также:
fireStateChanged
protected void fireStateChanged()
- См. также:
getListeners
public <T extends EventListener> T[] getListeners(Class<T> listenerType)
FooListener. Регистрация FooListener выполняется с помощью метода addFooListener. В качестве аргумента listenerType можно указать литерал класса, например FooListener.class. Например, можно запросить у DefaultCaret c список слушателей изменений с помощью следующего кода:
ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));Если таких слушателей нет, этот метод возвращает пустой массив.
- Параметры типа:
T— тип слушателя- Параметры:
-
listenerType— тип запрашиваемых слушателей - Возвращает:
- массив всех объектов, зарегистрированных в этом компоненте в качестве
FooListener, или пустой массив, если такие слушатели не добавлены - Исключения:
-
ClassCastException— еслиlistenerTypeне задает класс или интерфейс, реализующийjava.util.EventListener - Начиная с:
- 1.3
- См. также:
setSelectionVisible
public void setSelectionVisible(boolean vis)
- Определено в:
-
setSelectionVisibleв интерфейсеCaret - Параметры:
-
vis— новая видимость
isSelectionVisible
public boolean isSelectionVisible()
- Определено в:
-
isSelectionVisibleв интерфейсеCaret - Возвращает:
- true, если выделение видно
isActive
public boolean isActive()
Этот метод возвращает значение, указывающее, находится ли Caret в данный момент в состоянии мигания. Он не сообщает, включена или выключена каретка в данный момент. Чтобы определить, отрисована ли сейчас каретка, используйте метод isVisible.
- Возвращает:
-
true, если активна, иначеfalse - Начиная с:
- 1.5
- См. также:
isVisible
public boolean isVisible()
isActive указывает, находится ли каретка в состоянии мигания, то есть может быть видимой, а isVisible указывает, действительно ли каретка видна. Подклассы, в которых требуется реализовать мигание каретки иначе, должны переопределить paint и отрисовывать каретку, только если этот метод возвращает true.
setVisible
public void setVisible(boolean e)
isVisible и isActive. Вызов этого метода со значением true активирует мигание каретки. Установка значения false полностью отключает ее. Чтобы определить, активно ли мигание, вызовите isActive. По сути, isActive является соответствующим методом получения значения для этого метода. С помощью isVisible можно получить текущий статус видимости каретки, то есть узнать, отрисована ли она в данный момент. Этот статус меняется при включении и выключении каретки во время мигания. Ниже перечислены возможные значения, возвращаемые isActive и isVisible после вызова этого метода:
setVisible(true):
- isActive(): true
- isVisible(): true или false в зависимости от того, включена или выключена каретка в данный момент
setVisible(false):
- isActive(): false
- isVisible(): false
- Определено в:
-
setVisibleв интерфейсеCaret - Параметры:
-
e— признак видимости - См. также:
setBlinkRate
public void setBlinkRate(int rate)
- Определено в:
-
setBlinkRateв интерфейсеCaret - Параметры:
-
rate— интервал в миллисекундах; 0 отключает мигание - См. также:
getBlinkRate
public int getBlinkRate()
- Определено в:
-
getBlinkRateв интерфейсеCaret - Возвращает:
- задержку в миллисекундах. Если она равна нулю, каретка не мигает.
- См. также:
getDot
getMark
setDot
moveDot
moveDot
public void moveDot(int dot, Position.Bias dotBias)
- Параметры:
-
dot— позиция >= 0 -
dotBias— смещение для этой позиции; неnull - Исключения:
-
IllegalArgumentException— если смещение равноnull - Начиная с:
- 1.6
- См. также:
setDot
public void setDot(int dot, Position.Bias dotBias)
- Параметры:
-
dot— позиция >= 0 -
dotBias— смещение для этой позиции, неnull - Исключения:
-
IllegalArgumentException— если смещение равноnull - С:
- 1.6
- См. также:
getDotBias
public Position.Bias getDotBias()
- Возвращает:
- смещение позиции каретки
- С:
- 1.6
getMarkBias
public Position.Bias getMarkBias()
- Возвращает:
- смещение отметки
- С:
- 1.6
setMagicCaretPosition
public void setMagicCaretPosition(Point p)
- Определено в:
-
setMagicCaretPositionв интерфейсеCaret - Параметры:
-
p— позиция - См. также:
getMagicCaretPosition
public Point getMagicCaretPosition()
- Определено в:
-
getMagicCaretPositionв интерфейсеCaret - Возвращает:
- позицию; см. #setMagicCaretPosition
- См. также:
equals
public boolean equals(Object obj)
© 1993, 2025, 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/25/docs/api/java.desktop/javax/swing/text/DefaultCaret.html