- java.lang.Object
-
- java.util.EventObject
-
- javafx.event.Event
-
- javafx.scene.input.InputEvent
-
- javafx.scene.input.DragEvent
-
- Все реализованные интерфейсы:
-
Serializable,Cloneable
public final class DragEvent extends InputEvent
События перетаскивания заменяют события мыши во время жеста перетаскивания и размещения. Разница между жестами нажатие-перетаскивание-отпускание и перетаскивание и размещение описана вMouseEvent.Жест перетаскивания и размещения может быть начат вызовом
startDragAndDrop()(на узле или сцене) внутри обработчика событияDRAG_DETECTED. Данные, которые должны быть переданы целевому объекту размещения, помещаются вdragBoardв этот момент.События входа/выхода перетаскивания ведут себя аналогично событиям входа/выхода мыши, см. обзор
MouseEvent.Источники перетаскивания: инициирование жеста перетаскивания и размещения
Когда обнаруживается жест перетаскивания, приложение может решить, начать ли жест перетаскивания и размещения или продолжить жест нажатие-перетаскивание-отпускание.Стандартный механизм обнаружения перетаскивания использует движения мыши с нажатой кнопкой в сочетании с гистерезисом. Это поведение можно дополнить приложением. Каждое событие
MOUSE_PRESSEDиMOUSE_DRAGGEDимеет флагdragDetect, который определяет, был ли обнаружен жест перетаскивания. Значение по умолчанию этого флага зависит от стандартного механизма обнаружения и может быть изменено вызовомsetDragDetect()внутри обработчика события. Когда обработка одного из этих событий завершается с флагомdragDetect, установленным в true, событиеDRAG_DETECTEDMouseEventотправляется потенциальному источнику жеста (объекту, на котором была нажата кнопка мыши). Это событие уведомляет об обнаружении жеста.Внутри обработчика события
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 EventType<DragEvent>ANYОбщий супертип для всех типов событий перетаскивания.static EventType<DragEvent>DRAG_DONEЭто событие возникает при перетаскивании и падения источника его данных на целевой объект.static EventType<DragEvent>DRAG_DROPPEDЭто событие возникает при отпускании кнопки мыши во время перетаскивания над целевым объектом.static EventType<DragEvent>DRAG_ENTEREDЭто событие возникает, когда событие перетаскивания входит в узел.static EventType<DragEvent>DRAG_ENTERED_TARGETЭто событие возникает, когда событие перетаскивания входит в узел.static EventType<DragEvent>DRAG_EXITEDЭто событие возникает, когда событие перетаскивания выходит из узла.static EventType<DragEvent>DRAG_EXITED_TARGETЭто событие возникает, когда событие перетаскивания выходит из узла.static EventType<DragEvent>DRAG_OVERЭто событие возникает, когда событие перетаскивания проходит внутри этого узла.-
Поля, унаследованные от класса javafx.event.Event
consumed, eventType, NULL_SOURCE_TARGET, target
-
Поля, унаследованные от класса java.util.EventObject
source
-
-
Краткое описание конструкторов
Конструкторы Конструктор Описание 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.DragEvent(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, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)Создаёт копию заданного события перетаскивания с подставленными значениями полей.DragEventcopyFor(Object source, EventTarget target, EventType<DragEvent> type)Создаёт копию заданного события перетаскивания с подставленными значениями полей.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
Это событие происходит, когда жест перетаскивания входит в узел. Это варианта распространения, который также доставляется всем родителям входящего узла (если он не был обработан). Когда уведомления о входе в некоторых дочерних узлах нежелательны,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_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. -
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)
Создает новое событие DragEvent с пустым источником и целевым элементом.- Параметры:
-
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)
Описание скопировано из класса:EventСоздаёт и возвращает копию этого события с указанным источником и целью события. Если источник или цель установлены вnull, они заменяются значением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()
Описание скопировано из класса: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
- Возвращает:
- было ли это событие принято
- См. также:
acceptTransferModes(javafx.scene.input.TransferMode...)
-
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.- Возвращает:
- dragboard, доступный для передачи данных
-
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.