Класс 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 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 с пустым источником и целевым объектом. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | acceptTransferModes(TransferMode... transferModes) | Принимает данный DragEvent, выбирая режим передачи для операции падения. |
DragEvent | copyFor(Object newSource,
EventTarget newTarget) | Создаёт и возвращает копию этого события со указанным источником и целевым объектом. |
DragEvent | copyFor(Object source,
EventTarget target,
Object gestureSource,
Object gestureTarget,
EventType<DragEvent> eventType) | Создаёт копию данного события перетаскивания с подставленными полями. |
DragEvent | copyFor(Object source,
EventTarget target,
EventType<DragEvent> type) | Создаёт копию данного события перетаскивания с подставленными полями. |
TransferMode | getAcceptedTransferMode() | Получает режим передачи, принятый потенциальной целью. |
Object | getAcceptingObject() | Объект, который принял перетаскивание. |
Dragboard | getDragboard() | Dragboard, доступный для передачи данных. |
EventType<DragEvent> | getEventType() | Возвращает тип события. |
Object | getGestureSource() | Объект-источник события перетаскивания. |
Object | getGestureTarget() | Объект-цель события перетаскивания. |
PickResult | getPickResult() | Возвращает информацию о выборе. |
double | getSceneX() | Возвращает горизонтальную позицию события относительно начала Scene, содержащего источник DragEvent. |
double | getSceneY() | Возвращает вертикальную позицию события относительно начала Scene, содержащего источник DragEvent. |
double | getScreenX() | Возвращает абсолютную горизонтальную позицию события. |
double | getScreenY() | Возвращает абсолютную вертикальную позицию события. |
TransferMode | getTransferMode() | Режим передачи данных. |
double | getX() | Горизонтальная позиция события относительно начала координат источника DragEvent. |
double | getY() | Вертикальная позиция события относительно начала координат источника DragEvent. |
double | getZ() | Глубина позиции события относительно начала координат источника MouseEvent. |
boolean | isAccepted() | Указывает, было ли это событие принято. |
boolean | isDropCompleted() | Указывает, был ли вызван setDropCompleted(true) на этом событии. |
void | setDropCompleted(boolean isTransferDone) | Указывает, что обработка передачи этого 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 обработчик событий.- См. также:
MouseEvent for more information about mouse entered/exited handling which is similar
DRAG_ENTERED
public static final EventType<DragEvent> DRAG_ENTERED
DRAG_ENTERED_TARGET.- См. также:
MouseEvent for more information about mouse entered/exited handling which is similar
DRAG_EXITED_TARGET
public static final EventType<DragEvent> DRAG_EXITED_TARGET
DRAG_EXITED обработчик событий.- См. также:
MouseEvent for more information about mouse entered/exited handling which is similar
DRAG_EXITED
public static final EventType<DragEvent> DRAG_EXITED
DRAG_EXITED_TARGET.- См. также:
MouseEvent for more information about mouse entered/exited handling which is similar
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
- Возвращает:
- было ли это событие принято
- См. также:
acceptTransferModes(javafx.scene.input.TransferMode...)
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.