Класс 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, который используется для хранения bounding box последнего отображенного курсора. Это позволяет курсору перерисовываться потокобезопасным способом при перемещении курсора без вызова modelToView, который нестабилен между обновлениями модели и ремонтом представления (т.е. порядок доставки DocumentListeners не гарантирован).
Магическая позиция курсора устанавливается в null при изменении позиции курсора. Таймер используется для определения нового местоположения (после изменения курсора). При срабатывании таймера, если магическая позиция курсора по-прежнему null, она устанавливается в текущую позицию курсора. Любые действия, которые изменяют позицию курсора и хотят сохранить магическую позицию курсора неизменной, должны запомнить магическую позицию курсора, изменить курсор, а затем установить магическую позицию курсора в её исходное значение. Это выгодно тем, что только те действия, которые хотят сохранить магическую позицию курсора (например, open/down), должны знать о ней.
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими версиями 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
- С:
- 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- событие щелчка мышью - См. также:
Нажатие мыши
public void mousePressed(MouseEvent e)
- Определено в:
-
mousePressedв интерфейсеMouseListener - Параметры:
-
e- событие мыши - См. также:
Отпускание мыши
public void mouseReleased(MouseEvent e)
- Определено в:
-
mouseReleasedв интерфейсеMouseListener - Параметры:
-
e- событие мыши - См. также:
Ввод мыши
public void mouseEntered(MouseEvent e)
- Определено в:
-
mouseEnteredв интерфейсеMouseListener - Параметры:
-
e- событие мыши - См. также:
Выход мыши
public void mouseExited(MouseEvent e)
- Определено в:
-
mouseExitedв интерфейсеMouseListener - Параметры:
-
e- событие мыши - См. также:
Перетаскивание мыши
public void mouseDragged(MouseEvent e)
- Определено в:
-
mouseDraggedв интерфейсеMouseMotionListener - Параметры:
-
e- событие мыши - См. также:
Движение мыши
public void mouseMoved(MouseEvent e)
- Определено в:
-
mouseMovedв интерфейсеMouseMotionListener - Параметры:
-
e- событие мыши - См. также:
Рисование
public void paint(Graphics g)
Если в ассоциированном документе присутствует несколько направлений текста, будет отображаться флаг, указывающий смещение курсора. Это произойдет только в том случае, если связанный документ является подклассом AbstractDocument и в структуре элемента bidi присутствует несколько уровней bidi (т. е. текст имеет несколько связанных с ним направлений).
- Определено в:
-
paintв интерфейсеCaret - Параметры:
-
g- контекст графики - См. также:
Установка
public void install(JTextComponent c)
- Определено в:
-
installв интерфейсеCaret - Параметры:
-
c- компонент - См. также:
Удаление
public void deinstall(JTextComponent c)
- Определено в:
-
deinstallв интерфейсеCaret - Параметры:
-
c- компонент - См. также:
Добавить слушателя изменений
public void addChangeListener(ChangeListener l)
- Определено в:
-
addChangeListenerв интерфейсеCaret - Параметры:
-
l- слушатель - См. также:
Удалить слушателя изменений
public void removeChangeListener(ChangeListener l)
- Определено в:
-
removeChangeListenerв интерфейсеCaret - Параметры:
-
l- слушатель - См. также:
Получить слушателей изменений
public ChangeListener[] getChangeListeners()
- Возвращает:
- все слушатели изменений данного курсора или пустой массив, если слушатели изменений не зарегистрированы
- С:
- 1.4
- См. также:
Сгенерировать событие изменения состояния
protected void fireStateChanged()
- См. также:
Получить слушателей
public <T extends EventListener> T[] getListeners(Class<T> listenerType)
addFooListener. Вы можете указать аргумент listenerType с помощью литерала класса, например, FooListener.class. Например, вы можете запросить слушателей изменений в DefaultCaret c следующим кодом:
ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));Если таких слушателей не существует, этот метод возвращает пустой массив.
- Тип параметров:
-
T- тип слушателя - Параметры:
-
listenerType- тип запрашиваемых слушателей - Возвращает:
- массив всех объектов, зарегистрированных в качестве слушателей на этом компоненте, или пустой массив, если такие слушатели не были добавлены
- Исключения:
-
ClassCastException- еслиlistenerTypeне указывает класс или интерфейс, реализующийjava.util.EventListener - С:
- 1.3
- См. также:
Установить видимость выделения
public void setSelectionVisible(boolean vis)
- Определено в:
-
setSelectionVisibleв интерфейсеCaret - Параметры:
-
vis- новая видимость
Видимость выделения
public boolean isSelectionVisible()
- Определено в:
-
isSelectionVisibleв интерфейсеCaret - Возвращает:
- true, если выделение видимо
Активен
public boolean isActive()
Этот метод возвращает значение, указывающее, находится ли Caret в настоящее время в мигающем состоянии. Он не предоставляет информацию о том, в настоящее время мигает курсор или нет. Чтобы определить, в настоящее время курсор нарисован, используйте метод isVisible.
- Возвращает:
-
trueесли активен, иначеfalse - С:
- 1.5
- См. также:
isVisible
public boolean isVisible()
isActive указывает, находится ли курсор в мигающем состоянии, так что он может быть видимым, а isVisible указывает, действительно ли курсор виден. Подклассы, которые хотят отображать мигающий курсор, должны переопределить paint и отображать курсор только в том случае, если этот метод возвращает true.
- Specified by:
-
isVisibleв интерфейсеCaret - Returns:
- true, если виден, иначе false
- See Also:
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:
-
setVisibleв интерфейсеCaret - Parameters:
-
e- спецификатор видимости - See Also:
setBlinkRate
public void setBlinkRate(int rate)
- Specified by:
-
setBlinkRateв интерфейсеCaret - Parameters:
-
rate- скорость в миллисекундах, 0 для остановки мигания - See Also:
getBlinkRate
public int getBlinkRate()
- Specified by:
-
getBlinkRateв интерфейсеCaret - Returns:
- задержка в миллисекундах. Если она равна нулю, курсор не будет мигать.
- See Also:
getDot
public int getDot()
- Specified by:
-
getDotв интерфейсеCaret - Returns:
- позиция >= 0
- See Also:
getMark
public int getMark()
- Specified by:
-
getMarkв интерфейсеCaret - Returns:
- позиция >= 0
- See Also:
setDot
public void setDot(int dot)
- Specified by:
-
setDotв интерфейсеCaret - Parameters:
-
dot- позиция >= 0 - See Also:
moveDot
public void moveDot(int dot)
- Specified by:
-
moveDotв интерфейсеCaret - Parameters:
-
dot- позиция >= 0 - See Also:
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:
-
setMagicCaretPositionв интерфейсеCaret - Parameters:
-
p- позиция - See Also:
getMagicCaretPosition
public Point getMagicCaretPosition()
- Specified by:
-
getMagicCaretPositionв интерфейсеCaret - Returns:
- позиция, см. #setMagicCaretPosition
- See Also:
equals
public boolean equals(Object obj)
- Overrides:
-
equalsв классеRectangle - Parameters:
-
obj- объект для сравнения с этим шрифтом - Returns:
-
trueесли объекты равны;falseв противном случае - See Also:
© 1993, 2023, 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/21/docs/api/java.desktop/javax/swing/text/DefaultCaret.html