Класс 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 отправляется целевому элементу жеста. В его обработчике целевой элемент жеста может получить доступ к данным на доске перетаскивания. После того, как данные были переданы (или принято решение не передавать их), жест необходимо завершить, вызвав 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<DragEvent> |
ANY |
Общий супертип для всех типов событий перетаскивания. |
static final EventType<DragEvent> |
DRAG_DONE |
Это событие возникает при перетаскивании и падения источника после того, как данные были отложены на целевой объект. |
static final EventType<DragEvent> |
DRAG_DROPPED |
Это событие возникает, когда кнопка мыши отпускается во время перетаскивания и падения на целевой объект. |
static final EventType<DragEvent> |
DRAG_ENTERED |
Это событие возникает, когда жест перетаскивания входит в узел. |
static final EventType<DragEvent> |
DRAG_ENTERED_TARGET |
Это событие возникает, когда жест перетаскивания входит в узел. |
static final EventType<DragEvent> |
DRAG_EXITED |
Это событие возникает, когда жест перетаскивания выходит из узла. |
static final EventType<DragEvent> |
DRAG_EXITED_TARGET |
Это событие возникает, когда жест перетаскивания выходит из узла. |
static final EventType<DragEvent> |
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<DragEvent> |
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
public static final EventType<DragEvent> 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в классеEvent - Параметры:
-
newSource- новый источник скопированного события -
newTarget- новый целевой объект скопированного события - Возвращает:
- копию события с новым источником и целевым объектом
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.