Spec-Zone.ru › OpenJavaFX 24

Класс DragEvent

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_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<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(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)
Создаёт копию заданного события перетаскивания с подстановкой заданных полей.
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(boolean isTransferDone)
Указывает, что обработка передачи этого DragEvent была успешно завершена во время обработчика события DRAG_DROPPED.

Методы, объявленные в классе javafx.event.Event

clone, consume, fireEvent, getTarget, isConsumed

Методы, объявленные в классе java.util.EventObject

getSource, toString

Методы, объявленные в классе java.lang.Object

equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание полей

ANY

public static final EventType<DragEvent> ANY
Общий супертип для всех типов событий перетаскивания.

DRAG_ENTERED_TARGET

public static final EventType<DragEvent> DRAG_ENTERED_TARGET
Это событие возникает, когда жесты перетаскивания входят в узел. Это вариант «пузырькового» события, которое также доставляется всем родительским узлам входящего узла (если оно не было обработано). Когда уведомления о входе в некоторых дочерних узлах нежелательны, следует использовать DRAG_ENTERED обработчик событий.
См. также:
  • MouseEvent для получения дополнительной информации о обработке ввода/вывода мыши, которая аналогична

DRAG_ENTERED

public static final EventType<DragEvent> DRAG_ENTERED
Это событие возникает, когда жест перетаскивания входит в узел. Этот тип события доставляется только во входной узел, если родительские узлы хотят отфильтровать его или получить событие «пузырька», они должны использовать DRAG_ENTERED_TARGET.
См. также:
  • MouseEvent для получения дополнительной информации о обработке ввода/вывода мыши, которая аналогична

DRAG_EXITED_TARGET

public static final EventType<DragEvent> DRAG_EXITED_TARGET
Это событие возникает, когда жест перетаскивания выходит из узла. Это вариант «пузырькового» события, которое также доставляется всем родительским узлам выходящего узла (если оно не было обработано). Когда уведомления о выходе из некоторых дочерних узлов нежелательны, DRAG_EXITED обработчик событий должен быть использован.
См. также:
  • MouseEvent для получения дополнительной информации о обработке ввода/вывода мыши, которая аналогична

DRAG_EXITED

public static final EventType<DragEvent> DRAG_EXITED
Это событие возникает, когда жест перетаскивания выходит из узла. Этот тип события доставляется только в выходящий узел, если родительские узлы хотят отфильтровать его или получить событие «пузырька», они должны использовать DRAG_EXITED_TARGET.
См. также:
  • MouseEvent для получения дополнительной информации о обработке ввода/вывода мыши, которая аналогична

DRAG_OVER

public static final EventType<DragEvent> DRAG_OVER
Это событие возникает, когда жест перетаскивания проходит внутри этого узла.

DRAG_DROPPED

public static final EventType<DragEvent> DRAG_DROPPED
Это событие возникает, когда кнопка мыши отпускается во время жеста перетаскивания и放下 на целевой объект. Передача данных из DragEvent's dragboard должна произойти в обработчике этого события.

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 в классе 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()
Описание скопировано из класса: Event
Получает тип события этого события. Объекты одного и того же класса Event могут иметь разные типы событий. Эти типы событий дополнительно указывают, какой тип события произошел.
Переопределяет:
getEventType в классе Event
Возвращает:
тип события

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()
Панель перетаскивания, доступная для передачи данных. Данные могут быть помещены на эту панель в обработчике события мыши 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) было вызвано

Сообщить об ошибке или предложить улучшение
Copyright © 2008, 2025, Oracle и/или его аффилированные лица. Все права защищены.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API