Класс DragEvent
- java.util.EventObject
-
- javafx.event.Event
-
- javafx.scene.input.InputEvent
-
- javafx.scene.input.DragEvent
Все реализованные интерфейсы:
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() {
@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() {
@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() {
@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 EventType<DragEvent>ANYОбщий супертип для всех типов событий перетаскивания.static EventType<DragEvent>DRAG_DONEЭто событие возникает при перетаскивании и падении источника после того, как данные были выпущены на целевой элемент.static EventType<DragEvent>DRAG_DROPPEDЭто событие возникает при отпускании кнопки мыши во время перетаскивания и падения на целевой элемент.static EventType<DragEvent>DRAG_ENTEREDЭто событие возникает при входе события перетаскивания в узел.static EventType<DragEvent>DRAG_ENTERED_TARGETЭто событие возникает при входе события перетаскивания в узел. Это событие типа bubbling, которое также доставляется всем родителям входящего узла (если оно не было обработано). Когда уведомления о входе в некоторых дочерних элементах узла нежелательны, следует использовать обработчик событияDRAG_ENTERED.static EventType<DragEvent>DRAG_EXITEDЭто событие возникает при выходе события перетаскивания из узла.static EventType<DragEvent>DRAG_EXITED_TARGETЭто событие возникает при выходе события перетаскивания из узла. Этот тип события доставляется только в выходной узел, если родители хотят отфильтровать его или получить событие bubbling, они должны использоватьDRAG_EXITED_TARGET.static EventType<DragEvent>DRAG_OVERЭто событие возникает при перемещении события перетаскивания внутри этого узла.-
Поля, унаследованные от класса javafx.event.Event
consumed, eventType, NULL_SOURCE_TARGET, target
-
Поля, унаследованные от класса java.util.EventObject
source
-
-
Краткое описание конструкторов
Конструкторы Конструктор и описание DragEvent(EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)Создает новое событие DragEvent с пустым источником и целевым элементом.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)Создает новое событие DragEvent.
-
Краткое описание методов
Все методыМетоды экземпляраКонкретные методы Модификатор и тип Метод и описание voidacceptTransferModes(TransferMode... transferModes)Принимает этотDragEvent, выбирая режим передачи для операции падения.DragEventcopyFor(Object newSource, EventTarget newTarget)Создаёт и возвращает копию этого события с указанным источником и целевым элементом события.DragEventcopyFor(Object source, EventTarget target, EventType<DragEvent> type)Создает копию данного события перетаскивания с заданными подставленными полями.DragEventcopyFor(Object source, EventTarget target, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)Создает копию данного события перетаскивания с заданными подставленными полями.TransferModegetAcceptedTransferMode()Получает режим передачи, принятый потенциальной целью.ObjectgetAcceptingObject()Объект, который принял перетаскивание.DragboardgetDragboard()Объект Dragboard, доступный для передачи данных.EventType<DragEvent>getEventType()Получает тип события этого события.ObjectgetGestureSource()Объект-источник события перетаскивания.ObjectgetGestureTarget()Объект-цель события перетаскивания.PickResultgetPickResult()Возвращает информацию о выборе.doublegetSceneX()Возвращает горизонтальную позицию события относительно начала координатScene, содержащего источник DragEvent.doublegetSceneY()Возвращает вертикальную позицию события относительно начала координатScene, содержащего источник DragEvent.doublegetScreenX()Возвращает абсолютную горизонтальную позицию события.doublegetScreenY()Возвращает абсолютную вертикальную позицию события.TransferModegetTransferMode()Режим передачи данных.doublegetX()Горизонтальная позиция события относительно начала координат источника DragEvent.doublegetY()Вертикальная позиция события относительно начала координат источника DragEvent.doublegetZ()Позиция глубины события относительно начала координат источника MouseEvent.booleanisAccepted()Указывает, было ли это событие принято.booleanisDropCompleted()Признак вызоваsetDropCompleted(true)для этого события.voidsetDropCompleted(boolean isTransferDone)Указывает, что обработка передачи этогоDragEventбыла успешно завершена во время обработчика событияDRAG_DROPPED.-
Методы, унаследованные от класса javafx.event.Event
clone, consume, fireEvent, getTarget, isConsumed
-
Методы, унаследованные от класса java.util.EventObject
getSource, toString
-
-
Подробное описание полей
-
ANY
public static final EventType<DragEvent> ANY
Общий супертип для всех типов событий перетаскивания.
-
DRAG_ENTERED_TARGET
public static final EventType<DragEvent> DRAG_ENTERED_TARGET
Это событие возникает при входе события перетаскивания в узел. Это событие типа bubbling, которое также доставляется всем родителям входящего узла (если оно не было обработано). Когда уведомления о входе в некоторых дочерних элементах узла нежелательны, следует использовать обработчик событияDRAG_ENTERED.
-
DRAG_ENTERED
public static final EventType<DragEvent> DRAG_ENTERED
Это событие возникает при входе события перетаскивания в узел. Этот тип события доставляется только в входящий узел, если родители хотят отфильтровать его или получить событие bubbling, они должны использоватьDRAG_ENTERED_TARGET.
-
DRAG_EXITED_TARGET
public static final EventType<DragEvent> DRAG_EXITED_TARGET
Это событие возникает при выходе события перетаскивания из узла. Это событие типа bubbling, которое также доставляется всем родителям выходящего узла (если оно не было обработано). Когда уведомления о выходе из некоторых дочерних узлов узла нежелательны, следует использовать обработчик событияDRAG_EXITED.
-
DRAG_EXITED
public static final EventType<DragEvent> DRAG_EXITED
Это событие возникает при выходе события перетаскивания из узла. Этот тип события доставляется только в выходной узел, если родители хотят отфильтровать его или получить событие bubbling, они должны использовать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)Создает новое событие DragEvent. Для событий DRAG_DROPPED и DRAG_DONE, состояниеacceptedиacceptedTransferModeустанавливаются в соответствии с переданнымtransferMode.Параметры:
source- источник события. Может быть null.С момента:
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)Создает новое событие DragEvent с пустым источником и целевым элементом.Параметры:
eventType- Тип события.С момента:
JavaFX 8.0
-
-
Метод Detail
-
copyFor
public DragEvent copyFor(Object source, EventTarget target, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)Создаёт копию заданного события перетаскивания с заменой указанных полей.Параметры:
source- новый источник скопированного событияВозвращает:
копию события с полями
С момента:
JavaFX 8.0
-
copyFor
public DragEvent copyFor(Object newSource, EventTarget newTarget)Описание скопировано из класса:EventСоздаёт и возвращает копию этого события с указанным источником и целью события. Если источник или цель установлены в значениеnull, оно заменяется значениемNULL_SOURCE_TARGET.
-
copyFor
public DragEvent copyFor(Object source, EventTarget target, EventType<DragEvent> type)Создаёт копию заданного события перетаскивания с заменой указанных полей.Параметры:
source- новый источник скопированного событияВозвращает:
копию события с полями
С момента:
JavaFX 8.0
-
getEventType
public EventType<DragEvent> getEventType()
Описание скопировано из класса:EventВозвращает тип события этого события. Объекты одного и того же классаEventмогут иметь разные типы событий. Эти типы событий дополнительно указывают, какой вид события произошёл.Переопределяет:
getEventTypeв классеInputEventВозвращает:
тип события
-
getX
public final double getX()
Горизонтальная позиция события относительно начала координат источника DragEvent.Возвращает:
горизонтальную позицию события относительно начала координат источника DragEvent.
-
getY
public final double getY()
Вертикальная позиция события относительно начала координат источника DragEvent.Возвращает:
вертикальную позицию события относительно начала координат источника DragEvent.
-
getZ
public final double getZ()
Глубинная позиция события относительно начала координат источника MouseEvent.Возвращает:
глубину позиции события относительно начала координат источника 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()
Режим передачи данных. Перед выполнением передачи данных это — режим передачи по умолчанию, установленный системой в соответствии со входными событиями, такими как нажатие пользователем некоторых модификаторов. Во время передачи данных (в событии DRAG_DROPPED) он определяет режим передачи, принятый предыдущим обработчиком DRAG_OVER. После передачи данных (в событии DRAG_DONE) он определяет фактический режим выполненной передачи.
-
isAccepted
public final boolean isAccepted()
Указывает, было ли это событие принято.Значение по умолчанию:
false
-
getAcceptedTransferMode
public final TransferMode getAcceptedTransferMode()
Возвращает режим передачи, принятый потенциальной целью.Возвращает:
режим передачи, принятый потенциальной целью.
-
getAcceptingObject
public final Object getAcceptingObject()
Объект, который принял перетаскивание.Возвращает:
объект, который принял перетаскивание.
С момента:
JavaFX 8.0
-
getDragboard
public final Dragboard getDragboard()
Dragboard, доступный для передачи данных. Данные могут быть помещены в этот dragboard в обработчике события мышиDRAG_DETECTED. Данные могут быть скопированы из этого dragboard в обработчике событияDRAG_DROPPED.
-
acceptTransferModes
public void acceptTransferModes(TransferMode... transferModes)
Принимает этотDragEvent, выбирая режим передачи для операции помещения. Используется для указания того, что потенциальная цель помещения, которая получает это событие, является целью помещения из обработчика событияDRAG_OVER.Он принимает один из режимов передачи, которые передаются в этот метод и поддерживаются источником жеста. Он принимает режим передачи по умолчанию, если это возможно, в противном случае — наиболее распространённый из приемлемых режимов.
-
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.