Класс DefaultCaret
- Все реализованные интерфейсы:
-
FocusListener,MouseListener,MouseMotionListener,Shape,Serializable,Cloneable,EventListener,Caret
- Прямые известные подклассы:
BasicTextUI.BasicCaret
public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
Эта реализация ожидает два источника асинхронных уведомлений. Поток таймера срабатывает асинхронно и заставляет курсор просто перерисовать последнюю область. Курсор также отслеживает изменения при изменении документа. Обычно это происходит в потоке обработки событий в результате какого-либо события мыши или клавиатуры. Поведение курсора при синхронных и асинхронных обновлениях документа контролируется свойством UpdatePolicy. Перерисовка нового положения курсора будет происходить в потоке обработки событий в любом случае, так как вызовы modelToView безопасны только в потоке обработки событий.
Курсор действует как слушатель мыши и фокуса для текстового компонента, в который он был установлен, и определяет семантику курсора на основе этих событий. Методы слушателей могут быть переопределены для изменения семантики. По умолчанию для установки фокуса и позиции курсора используется первая кнопка мыши. Перетаскивание указателя мыши первой кнопкой мыши вызовет выбор, который будет непрерывным в модели. Если связанный текстовый компонент редактируется, курсор станет видимым при получении фокуса и невидимым при потере фокуса.
Подсветка, привязанная к связанному текстовому компоненту, по умолчанию используется для рендеринга выделения. Внешний вид выделения можно настроить, предоставив отрисовщик для подсветки. По умолчанию используется отрисовщик, который будет рендерить сплошной цвет, как указано в связанном текстовом компоненте в свойстве SelectionColor. Это можно легко изменить, переопределив метод getSelectionPainter.
Вид курсора можно настроить, переопределив метод paint. Если метод paint изменён, также необходимо переопределить метод damage, чтобы вызвать перерисовку области, необходимой для отображения курсора. Курсор расширяет класс Rectangle, который используется для хранения области, где курсор был последний раз отображён. Это позволяет курсору перерисовываться потокобезопасным способом при перемещении курсора без вызова modelToView, который является нестабильным между обновлениями модели и восстановлением представления (т.е. порядок доставки в DocumentListeners не гарантируется).
Магическое положение курсора устанавливается в null при изменении положения курсора. Таймер используется для определения нового местоположения (после изменения курсора). При срабатывании таймера, если магическое положение курсора всё ещё равно null, оно устанавливается в текущую позицию курсора. Любые действия, изменяющие положение курсора и желающие сохранить магическое положение курсора неизменным, должны запомнить магическое положение курсора, изменить курсор и затем установить магическое положение курсора в его первоначальное значение. Это преимущество в том, что только действия, желающие сохранить магическое положение курсора (например, открытие/закрытие), должны знать о нём.
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими выпусками Swing. Текущая поддержка сериализации подходит для краткосрочного хранения или RMI между приложениями, работающими с одной версией Swing. Начиная с версии 1.4, поддержка долгосрочного хранения всех JavaBeans была добавлена в пакет java.beans. См. XMLEncoder.
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.awt.geom.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 |
Указывает, что позиция курсора должна обновляться только при выполнении изменений документа в потоке обработки событий. |
Поля, объявленные в классе java.awt.geom.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() |
Получает рисовальщик для подсветки. |
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 |
Устанавливает видимость курсора и перерисовывает его. |
Методы, унаследованные от класса java.awt.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
Методы, унаследованные от класса java.awt.geom.Rectangle2D
add, add, add, contains, contains, getPathIterator, getPathIterator, hashCode, intersect, intersects, intersectsLine, intersectsLine, outcode, setFrame, setRect, union
Методы, унаследованные от класса java.awt.geom.RectangularShape
clone, contains, contains, getCenterX, getCenterY, getFrame, getMaxX, getMaxY, getMinX, getMinY, intersects, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal
Методы, унаследованные от класса java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Методы, унаследованные от интерфейса java.awt.Shape
contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects
Подробное описание полей
UPDATE_WHEN_ON_EDT
public static final int UPDATE_WHEN_ON_EDT
- Since:
- 1.5
- См. также:
NEVER_UPDATE
public static final int NEVER_UPDATE
- Since:
- 1.5
- См. также:
ALWAYS_UPDATE
public static final int ALWAYS_UPDATE
- Since:
- 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— если передано недопустимое значение - Since:
- 1.5
- См. также:
getUpdatePolicy
public int getUpdatePolicy()
- Возвращает:
- одно из следующих значений:
UPDATE_WHEN_ON_EDT,NEVER_UPDATE,ALWAYS_UPDATE - Since:
- 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)
- Specified by:
-
mouseClickedin interfaceMouseListener - Parameters:
-
e- событие щелчка мыши - See Also:
mousePressed
public void mousePressed(MouseEvent e)
- Specified by:
-
mousePressedin interfaceMouseListener - Parameters:
-
e- событие нажатия мыши - See Also:
mouseReleased
public void mouseReleased(MouseEvent e)
- Specified by:
-
mouseReleasedin interfaceMouseListener - Parameters:
-
e- событие отпускания мыши - See Also:
mouseEntered
public void mouseEntered(MouseEvent e)
- Specified by:
-
mouseEnteredin interfaceMouseListener - Parameters:
-
e- событие входа мыши - See Also:
mouseExited
public void mouseExited(MouseEvent e)
- Specified by:
-
mouseExitedin interfaceMouseListener - Parameters:
-
e- событие выхода мыши - See Also:
mouseDragged
public void mouseDragged(MouseEvent e)
- Specified by:
-
mouseDraggedin interfaceMouseMotionListener - Parameters:
-
e- событие перемещения мыши - See Also:
mouseMoved
public void mouseMoved(MouseEvent e)
- Specified by:
-
mouseMovedin interfaceMouseMotionListener - Parameters:
-
e- событие перемещения мыши - See Also:
paint
public void paint(Graphics g)
Если в связанном документе присутствует несколько направлений текста, будет отображаться флаг, указывающий смещение курсора. Это произойдёт только в том случае, если связанный документ является подклассом AbstractDocument и в структуре элемента bidi присутствует несколько уровней bidi (т.е. текст имеет несколько связанных с ним направлений).
install
public void install(JTextComponent c)
deinstall
addChangeListener
public void addChangeListener(ChangeListener l)
- Specified by:
-
addChangeListenerin interfaceCaret - Parameters:
-
l- слушатель - See Also:
removeChangeListener
public void removeChangeListener(ChangeListener l)
- Specified by:
-
removeChangeListenerin interfaceCaret - Parameters:
-
l- слушатель - See Also:
getChangeListeners
public ChangeListener[] getChangeListeners()
- Returns:
- все слушатели изменений этого курсора или пустой массив, если слушатели изменений не зарегистрированы
- Since:
- 1.4
- See Also:
fireStateChanged
protected void fireStateChanged()
- See Also:
getListeners
public <T extends EventListener> T[] getListeners(Class<T> listenerType)
Вы можете указать аргумент класса, например, ChangeListener.class. Например, вы можете запросить слушателей изменений для компонента ChangeListener следующим образом:
ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));Если таких слушателей нет, этот метод возвращает пустой массив.
- Type Parameters:
T- тип слушателя- Parameters:
-
listenerType- тип запрашиваемых слушателей - Returns:
- массив всех объектов, зарегистрированных в качестве слушателей изменений на этом компоненте, или пустой массив, если такие слушатели не были добавлены
- Throws:
-
ClassCastException- еслиlistenerTypeне указывает класс или интерфейс, реализующий интерфейсjava.util.EventListener - Since:
- 1.3
- See Also:
setSelectionVisible
public void setSelectionVisible(boolean vis)
- Specified by:
-
setSelectionVisiblein interfaceCaret - Parameters:
-
vis- новая видимость
isSelectionVisible
public boolean isSelectionVisible()
- Specified by:
-
isSelectionVisiblein interfaceCaret - Returns:
- true, если выделение видимое
isActive
public boolean isActive()
Этот метод возвращает значение true, если курсор находится в мигающем состоянии. Он не предоставляет информацию о том, мигает он включён или выключён. Чтобы определить, изображается ли курсор в данный момент, используйте метод isVisible.
- Returns:
-
true, если активен, иначеfalse - Since:
- 1.5
- See Also:
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
- Specified by:
-
setVisiblein interfaceCaret - Parameters:
-
e- указатель видимости - See Also:
setBlinkRate
public void setBlinkRate(int rate)
- Specified by:
-
setBlinkRatein interfaceCaret - Parameters:
-
rate- скорость в миллисекундах, 0 для отключения мигания - See Also:
getBlinkRate
public int getBlinkRate()
- Specified by:
-
getBlinkRatein interfaceCaret - Returns:
- задержка в миллисекундах. Если значение равно нулю, курсор не будет мигать.
- See Also:
getDot
getMark
setDot
moveDot
moveDot
public void moveDot(int dot, Position.Bias dotBias)
- Parameters:
-
dot- позиция >= 0 -
dotBias- смещение для этой позиции, неnull - Throws:
-
IllegalArgumentException- если смещениеnull - Since:
- 1.6
- See Also:
setDot
public void setDot(int dot, Position.Bias dotBias)
- Parameters:
-
dot- позиция >= 0 -
dotBias- смещение для этой позиции, неnull - Throws:
-
IllegalArgumentException- если смещениеnull - Since:
- 1.6
- See Also:
getDotBias
public Position.Bias getDotBias()
- Returns:
- смещение позиции курсора
- Since:
- 1.6
getMarkBias
public Position.Bias getMarkBias()
- Returns:
- смещение метки
- Since:
- 1.6
setMagicCaretPosition
public void setMagicCaretPosition(Point p)
- Specified by:
-
setMagicCaretPositionin interfaceCaret - Parameters:
-
p- позиция - See Also:
getMagicCaretPosition
public Point getMagicCaretPosition()
- Specified by:
-
getMagicCaretPositionin interfaceCaret - Returns:
- позиция, см. #setMagicCaretPosition
- See Also:
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://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/swing/text/DefaultCaret.html