Spec-Zone.ru › OpenJavaFX 17

Класс 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 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.

Методы, объявленные в классе 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 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
Это событие возникает, когда кнопка мыши отпускается во время перетаскивания и опускания на целевой объект. Передача данных из 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) был вызван

© 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