Класс DragEvent
- Все реализованные интерфейсы:
-
Serializable,Cloneable
public final class DragEvent extends InputEvent
MouseEvent. Жест перетаскивания и перемещения может быть начат вызовом startDragAndDrop() (на узле или сцене) внутри обработчика события DRAG_DETECTED. Данные, которые должны быть переданы целевому объекту перемещения, помещаются в dragBoard в этот момент.
События входа/выхода перетаскивания ведут себя аналогично событиям входа/выхода мыши, см. обзор MouseEvent.
Источники перетаскивания: инициирование жеста перетаскивания и перемещения
Когда обнаруживается жест перетаскивания, приложение может решить, следует ли начать жест перетаскивания и перемещения или продолжить жест нажатие-перетаскивание-отпускание. По умолчанию механизм обнаружения перетаскивания использует движения мыши с нажатой кнопкой в сочетании с гистерезисом. Это поведение может быть дополнено приложением. Каждое событие MOUSE_PRESSED и MOUSE_DRAGGED имеет флаг dragDetect, который определяет, был ли обнаружен жест перетаскивания. Значение по умолчанию этого флага зависит от механизма обнаружения по умолчанию и может быть изменено с помощью вызова setDragDetect() внутри обработчика события. При завершении обработки одного из этих событий с флагом dragDetect, установленным в значение true, в потенциальный источник жеста (объект, на котором была нажата кнопка мыши) отправляется событие DRAG_DETECTED MouseEvent. Это событие уведомляет об обнаружении жеста.
Внутри обработчика события DRAG_DETECTED, если метод startDragAndDrop() вызывается на узле или сцене, и перетаскиваемые данные становятся доступными для возвращаемого Dragboard, объект, на котором был вызван startDragAndDrop(), считается источником жеста, и жест перетаскивания и перемещения запускается. Dragboard имеет функциональность системного буфера обмена, но используется специально для передачи данных при перетаскивании и перемещении.
Метод startDragAndDrop() принимает набор TransferMode, поддерживаемых источником жеста. Например, передача только TransferMode.COPY указывает, что источник жеста разрешает только копирование данных, а не перемещение или ссылки.
Следующий пример показывает простой источник перетаскивания и перемещения:
Rectangle rect = new Rectangle(100, 100);
rect.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) {
Dragboard db = startDragAndDrop(TransferMode.ANY);
ClipboardContent content = new ClipboardContent();
content.putString("Hello!");
db.setContent(content);
event.consume();
}
});
Потенциальные целевые объекты перемещения
После запуска жеста перетаскивания и перемещения любой объект (Node, Scene), над которым перетаскивается мышь, является потенциальной целью перемещения.
Когда курсор мыши перетаскивается в пределы потенциальной целевого объекта, потенциальная цель получает событие DRAG_ENTERED. Когда курсор мыши перетаскивается за пределы области потенциальной цели, она получает событие DRAG_EXITED. Также есть события DRAG_ENTERED_TARGET и DRAG_EXITED_TARGET, которые распространяются. Они ведут себя аналогично событиям входа/выхода мыши, см. обзор MouseEvent.
Потенциальная целевая точка перемещения может изменить свой вид, чтобы сообщить пользователю, что перетаскиваемые данные можно опустить на нее. Это можно сделать в обработчике события DRAG_OVER, основываясь на позиции курсора мыши. Другой вариант — изменить внешний вид потенциальной цели в обработчиках событий DRAG_ENTERED и DRAG_EXITED.
В обработчике события DRAG_OVER потенциальная целевая точка перемещения может указать, что она является фактической целью. Это делается путем вызова acceptTransferModes(TransferMode...) на событии, передав режимы передачи, которые она готова принять. Если он не вызывается во время доставки события или если ни один из переданных режимов передачи не поддерживается источником жеста, то потенциальная целевая точка перемещения не считается фактической целевой точкой перемещения.
При принятии события с помощью вызова acceptTransferModes(TransferMode...) следует учитывать тип данных, доступных в Dragboard. Доступ к Dragboard предоставляется методом getDragboard().
При принятии события потенциальная целевая точка жеста определяет, какой TransferMode принимается для операции. Для принятия решения можно использовать DragBoard.getTransferModes() (набор режимов передачи, поддерживаемых источником жеста) и DragEvent.getTransferMode() (режим передачи по умолчанию, выданный платформой, определяемый модификаторами клавиш). Можно передать дополнительные режимы передачи в метод acceptTransferModes(TransferMode...). В этом случае он принимает решение от имени приложения (выбирает режим по умолчанию, если он поддерживается источником жеста и принимается целевой точкой жеста, в противном случае выбирает наиболее распространенный режим из поддерживаемых и принятых). Событие DRAG_DROPPED в дальнейшем сообщает режим передачи, принятый обработчиком события DRAG_OVER.
Жест перетаскивания и перемещения завершается, когда кнопка мыши отпускается. Если это происходит над целевой точкой жеста, которая приняла предыдущие события DRAG_OVER с режимом передачи, поддерживаемым источником жеста, в целевую точку жеста отправляется событие DRAG_DROPPED. В его обработчике целевая точка жеста может получить доступ к данным на dragboard. После передачи данных (или принятия решения о том, что передачу не выполнять), жест необходимо завершить, вызвав метод setDropCompleted(Boolean) на событии. Аргумент Boolean указывает, были ли данные переданы успешно или нет. Если он не вызывается, жест считается неудачным.
Следующий пример показывает простую целевую точку перетаскивания и перемещения для текстовых данных:
Rectangle rect = new Rectangle(100, 100);
rect.setOnDragOver(new EventHandler<DragEvent>() {
@Override public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
if (db.hasString()) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
}
});
rect.setOnDragDropped(new EventHandler<DragEvent>() {
@Override public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
System.out.println("Dropped: " + db.getString());
success = true;
}
event.setDropCompleted(success);
event.consume();
}
});
Источники перетаскивания: завершение жеста перетаскивания и перемещения
После завершения жеста, независимо от того, была ли передача данных успешной, неудачной или отменена, событие DRAG_DONE отправляется источнику жеста. Метод getTransferMode() события сообщает источнику жеста, как завершилась передача данных. Если режим передачи имеет значение MOVE, это позволяет источнику очистить свои данные. Очистка данных источника обеспечивает пользователю соответствующий вид того, что данные были перемещены с помощью жеста перетаскивания и перемещения. Если имеет значение null, то жест перетаскивания и перемещения закончился без передачи каких-либо данных. Это может произойти в результате события отпускания кнопки мыши над узлом, который не является целевой точкой перемещения, или пользователь нажал клавишу ESC для отмены жеста перетаскивания и перемещения, или целевая точка жеста сообщила об неудачной передаче данных.
- С:
- JavaFX 2.0
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final EventType |
ANY |
Общий супертип для всех типов событий перетаскивания. |
static final EventType |
DRAG_DONE |
Это событие возникает при перетаскивании/опускании в источнике после того, как данные были опущены на целевой объект. |
static final EventType |
DRAG_DROPPED |
Это событие возникает при отпускании кнопки мыши во время перетаскивания/опускания на целевой объект. |
static final EventType |
DRAG_ENTERED |
Это событие возникает, когда жесты перетаскивания входят в узел. |
static final EventType |
DRAG_ENTERED_TARGET |
Это событие возникает, когда жесты перетаскивания входят в узел. |
static final EventType |
DRAG_EXITED |
Это событие возникает, когда жесты перетаскивания выходят из узла. |
static final EventType |
DRAG_EXITED_TARGET |
Это событие возникает, когда жесты перетаскивания выходят из узла. |
static final EventType |
DRAG_OVER |
Это событие возникает, когда жесты перетаскивания перемещаются внутри этого узла. |
Поля, объявленные в классе javafx.event.Event
consumed, eventType, NULL_SOURCE_TARGET, target
Поля, объявленные в классе java.util.EventObject
source
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
DragEvent |
Создаёт новое событие DragEvent. |
DragEvent |
Создаёт новое событие DragEvent с пустым источником и целью. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
acceptTransferModes |
Принимает этот DragEvent, выбирая режим передачи для операции опускания. |
DragEvent |
copyFor |
Создаёт и возвращает копию этого события со указанным источником и целью события. |
DragEvent |
copyFor |
Создаёт копию заданного события перетаскивания с подстановкой заданных полей. |
DragEvent |
copyFor |
Создаёт копию заданного события перетаскивания с подстановкой заданных полей. |
final TransferMode |
getAcceptedTransferMode() |
Получает режим передачи, принятый потенциальной целью. |
final Object |
getAcceptingObject() |
Объект, который принял перетаскивание. |
final Dragboard |
getDragboard() |
Перетаскиваемая область, которая доступна для передачи данных. |
EventType |
getEventType() |
Получает тип события этого события. |
final Object |
getGestureSource() |
Объект-источник жеста перетаскивания/опускания. |
final Object |
getGestureTarget() |
Объект-цель жеста перетаскивания/опускания. |
final PickResult |
getPickResult() |
Возвращает информацию о выборе. |
final double |
getSceneX() |
Возвращает горизонтальную позицию события относительно начала Scene, содержащего источник DragEvent. |
final double |
getSceneY() |
Возвращает вертикальную позицию события относительно начала Scene, содержащего источник DragEvent. |
final double |
getScreenX() |
Возвращает абсолютную горизонтальную позицию события. |
final double |
getScreenY() |
Возвращает абсолютную вертикальную позицию события. |
final TransferMode |
getTransferMode() |
Режим передачи данных. |
final double |
getX() |
Горизонтальная позиция события относительно начала координат источника DragEvent. |
final double |
getY() |
Вертикальная позиция события относительно начала координат источника DragEvent. |
final double |
getZ() |
Позиция глубины события относительно начала координат источника MouseEvent. |
final boolean |
isAccepted() |
Указывает, было ли это событие принято. |
boolean |
isDropCompleted() |
Было ли вызвано setDropCompleted(true) для этого события. |
void |
setDropCompleted |
Указывает, что обработка передачи этого DragEvent была успешно завершена во время обработчика события DRAG_DROPPED. |
Методы, объявленные в классе java.util.EventObject
getSource, toString
Подробное описание полей
ANY
public static final EventType<DragEvent> ANY
DRAG_ENTERED_TARGET
public static final EventType<DragEvent> DRAG_ENTERED_TARGET
DRAG_ENTERED обработчик событий.- См. также:
DRAG_ENTERED
public static final EventType<DragEvent> DRAG_ENTERED
DRAG_ENTERED_TARGET.- См. также:
DRAG_EXITED_TARGET
public static final EventType<DragEvent> DRAG_EXITED_TARGET
DRAG_EXITED обработчик событий должен быть использован.- См. также:
DRAG_EXITED
public static final EventType<DragEvent> DRAG_EXITED
DRAG_EXITED_TARGET.- См. также:
DRAG_OVER
public static final EventType<DragEvent> DRAG_OVER
DRAG_DROPPED
DRAG_DONE
public static final EventType<DragEvent> DRAG_DONE
transferMode события показывает, что только что произошло на целевом объекте. Если transferMode имеет значение MOVE, тогда источник может очистить свои данные. Очистка данных источника обеспечивает пользователю соответствующий вид, что данные были перемещены с помощью жеста перетаскивания и放下. transferMode, имеющий значение NONE, указывает, что никакие данные не были переданы во время жеста перетаскивания и放下.Подробное описание конструкторов
DragEvent
public DragEvent(Object source, EventTarget target, EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)
accepted и acceptedTransferMode устанавливаются в соответствии с переданным transferMode.- Параметры:
-
source- источник события. Может быть null. -
target- целевой объект события. Может быть null. -
eventType- Тип события. -
dragboard- dragboard события. -
x- X-координата относительно сцены. -
y- Y-координата относительно сцены. -
screenX- X-координата относительно экрана. -
screenY- Y-координата относительно экрана. -
transferMode- режим передачи события. -
gestureSource- источник жеста перетаскивания и放下 события. -
gestureTarget- целевой объект жеста перетаскивания и放下 события. -
pickResult- результат выбора. Может быть null, в этом случае результат выбора 2D без дополнительных значений строится на основе координат сцены и целевого объекта - С момента:
- JavaFX 8.0
DragEvent
public DragEvent(EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)
- Параметры:
-
eventType- Тип события. -
dragboard- dragboard события. -
x- X-координата относительно сцены. -
y- Y-координата относительно сцены. -
screenX- X-координата относительно экрана. -
screenY- Y-координата относительно экрана. -
transferMode- режим передачи события. -
gestureSource- источник жеста перетаскивания и放下 события. -
gestureTarget- целевой объект жеста перетаскивания и放下 события. -
pickResult- результат выбора. Может быть null, в этом случае результат выбора 2D без дополнительных значений строится на основе координат сцены - С момента:
- JavaFX 8.0
Подробное описание методов
copyFor
public DragEvent copyFor(Object source, EventTarget target, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)
- Параметры:
-
source- новый источник скопированного события -
target- новый целевой объект скопированного события -
gestureSource- новый источник жеста. -
gestureTarget- новый целевой объект жеста. -
eventType- новый тип события - Возвращает:
- копию события с полями
- С момента:
- JavaFX 8.0
copyFor
public DragEvent copyFor(Object newSource, EventTarget newTarget)
Eventnull, он заменяется значением NULL_SOURCE_TARGET.copyFor
public DragEvent copyFor(Object source, EventTarget target, EventType<DragEvent> type)
- Параметры:
-
source- источник скопированного события -
target- целевой объект скопированного события -
type- тип события - Возвращает:
- копию события с полями
- С момента:
- JavaFX 8.0
getEventType
public EventType<DragEvent> getEventType()
EventEvent могут иметь разные типы событий. Эти типы событий дополнительно указывают, какой тип события произошел.- Переопределяет:
-
getEventTypeв классеEvent - Возвращает:
- тип события
getX
public final double getX()
- Возвращает:
- горизонтальная позиция события относительно начала координат источника DragEvent
getY
public final double getY()
- Возвращает:
- вертикальная позиция события относительно начала координат источника DragEvent
getZ
public final double getZ()
- Возвращает:
- глубина позиции события относительно начала координат источника MouseEvent
- С момента:
- JavaFX 8.0
getScreenX
public final double getScreenX()
- Возвращает:
- абсолютная горизонтальная позиция события
getScreenY
public final double getScreenY()
- Возвращает:
- абсолютное вертикальное положение события
getSceneX
public final double getSceneX()
Scene, содержащего источник DragEvent. Если узел не находится в Scene, то значение относительно boundsInParent самого верхнего родителя узла DragEvent. Обратите внимание, что в 3D-сцене это представляет плоские координаты после применения проекционных преобразований.- Возвращает:
- горизонтальное положение события относительно начала координат
Scene, содержащего источник DragEvent
getSceneY
public final double getSceneY()
Scene, содержащего источник DragEvent. Если узел не находится в Scene, то значение относительно boundsInParent самого верхнего родителя узла DragEvent. Обратите внимание, что в 3D-сцене это представляет плоские координаты после применения проекционных преобразований.- Возвращает:
- вертикальное положение события относительно начала координат
Scene, содержащего источник DragEvent
getPickResult
public final PickResult getPickResult()
- Возвращает:
- новый объект PickResult, содержащий информацию о выборе
- С момента:
- JavaFX 8.0
getGestureSource
public final Object getGestureSource()
null верно в случае, если жест исходит из другого приложения.- Возвращает:
- объект-источник жеста перетаскивания и сбрасывания
getGestureTarget
public final Object getGestureTarget()
null верно, если жест перетаскивания и сбрасывания был отменён или завершён без передачи данных, или в данный момент нет целевого объекта, принимающего события перетаскивания.- Возвращает:
- объект-цель жеста перетаскивания и сбрасывания
getTransferMode
public final TransferMode getTransferMode()
- Возвращает:
- режим передачи данных
isAccepted
public final boolean isAccepted()
- Значение по умолчанию:
- false
- Возвращает:
- было ли это событие принято
- См. также:
getAcceptedTransferMode
public final TransferMode getAcceptedTransferMode()
- Возвращает:
- режим передачи, принятый потенциальной целью
getAcceptingObject
public final Object getAcceptingObject()
- Возвращает:
- объект, принявший перетаскивание
- С момента:
- JavaFX 8.0
getDragboard
public final Dragboard getDragboard()
DRAG_DETECTED. Данные могут быть скопированы с этой панели в обработчике события DRAG_DROPPED.- Возвращает:
- панель перетаскивания, доступная для передачи данных
acceptTransferModes
public void acceptTransferModes(TransferMode... transferModes)
DragEvent, выбирая режим передачи для операции сбрасывания. Используется для указания того, что потенциальная цель сбрасывания, которая получает это событие, является целью сбрасывания из обработчика события DRAG_OVER. Принимает один из режимов передачи, которые переданы в этот метод и поддерживаются источником жеста. Принимает режим передачи по умолчанию, если это возможно, в противном случае — наиболее распространённый из приемлемых режимов.
- Параметры:
-
transferModes— режим передачи для операции сбрасывания.
setDropCompleted
public void setDropCompleted(boolean isTransferDone)
DragEvent была успешно завершена во время обработки события DRAG_DROPPED. После этого вызова доступ к dragboard недоступен.- Параметры:
-
isTransferDone—trueуказывает, что передача прошла успешно. - Исключения:
-
IllegalStateException— если это не событие DRAG_DROPPED
isDropCompleted
public boolean isDropCompleted()
setDropCompleted(true) вызывалось для этого события.- Возвращает:
- true, если
setDropCompleted(true)было вызвано
© 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.