Spec-Zone.ru › OpenJavaFX 8
javafx.scene.input

Класс 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() {
    @Override public void handle(MouseEvent event) {
        Dragboard db = startDragAndDrop(TransferMode.ANY);
        ClipboardContent content = new ClipboardContent();
        content.putString("Hello!");
        db.setContent(content);
        event.consume();
    }
});

Возможные целевые объекты перетаскивания

После запуска жеста перетаскивания любой объект (Node, Scene), над которым перемещается мышь, является потенциальной целевой точкой перетаскивания.

Когда мышь перемещается внутрь границ потенциальной целевой точки перетаскивания, потенциальная целевая точка получает событие DRAG_ENTERED. Когда мышь перемещается за пределы границ потенциальной целевой точки, она получает событие DRAG_EXITED. Также существуют события DRAG_ENTERED_TARGET и DRAG_EXITED_TARGET. Они ведут себя аналогично событиям входа/выхода мыши, см. обзор MouseEvent.

Потенциальная целевая точка перетаскивания может изменить свой внешний вид, чтобы пользователь знал, что перетаскиваемые данные могут быть помещены на нее. Это можно сделать в обработчике события DRAG_OVER, основываясь на положении мыши. Другой вариант — изменить внешний вид потенциальной целевой точки в обработчиках DRAG_ENTERED и DRAG_EXITED.

В обработчике события DRAG_OVER потенциальная целевая точка перетаскивания может указать, что она является фактической целевой точкой. Это делается путем вызова acceptTransferModes(TransferMode...) на событии, передавая режимы передачи, которые она готова принять. Если он не вызывается во время доставки события или ни один из переданных режимов передачи не поддерживается источником жеста, то потенциальная целевая точка перетаскивания не рассматривается как фактическая целевая точка перетаскивания.

При принятии решения о принятии события путем вызова acceptTransferModes(TransferMode...) следует учитывать тип данных, доступных в Dragboard. Доступ к Dragboard предоставляется методом getDragboard().

При принятии события потенциальная целевая точка жеста принимает решение о том, какой TransferMode принимается для операции. Для принятия решения можно использовать DragBoard.getTransferModes() (набор режимов передачи, поддерживаемых источником жеста) и DragEvent.getTransferMode() (режим передачи по умолчанию, выпущенный платформой, управляемый модификаторами клавиш). Можно передать больше режимов передачи в метод acceptTransferModes(TransferMode...). В этом случае он принимает решение от имени приложения (он выбирает режим по умолчанию, если он поддерживается источником жеста и принят целевой точкой жеста, в противном случае он выбирает наиболее распространенный режим поддерживаемых и принятых). Событие DRAG_DROPPED впоследствии сообщает о режиме передачи, принятом обработчиком события DRAG_OVER.

Жест перетаскивания завершается при отпускании кнопки мыши. Если это происходит над целевой точкой жеста, которая приняла предыдущие события DRAG_OVER с режимом передачи, поддерживаемым источником жеста, событие DRAG_DROPPED отправляется целевой точке жеста. В своем обработчике целевая точка жеста может получить доступ к данным в dragboard. После того, как данные были переданы (или принято решение не передавать), необходимо завершить жест, вызвав setDropCompleted(Boolean) на событии. Аргумент Boolean указывает, были ли данные переданы успешно или нет. Если он не вызывается, жест считается неуспешным.

Следующий пример показывает простую целевую точку перетаскивания для текстовых данных:

Rectangle rect = new Rectangle(100, 100);

rect.setOnDragOver(new EventHandler() {
    @Override public void handle(DragEvent event) {
        Dragboard db = event.getDragboard();
        if (db.hasString()) {
            event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
        }
        event.consume();
    }
});

rect.setOnDragDropped(new EventHandler() {
    @Override public void handle(DragEvent event) {
        Dragboard db = event.getDragboard();
        boolean success = false;
        if (db.hasString()) {
            System.out.println("Dropped: " + db.getString());
            success = true;
        }
        event.setDropCompleted(success);
        event.consume();
    }
});

Источники перетаскивания: завершение жеста перетаскивания

После завершения жеста, будь то успешная или неуспешная передача данных или отмена, событие DRAG_DONE отправляется источнику жеста. Метод getTransferMode() события указывает источнику жеста, как завершилась передача данных. Если режим передачи имеет значение MOVE, это позволяет источнику очистить свои данные. Очистка данных источника обеспечивает пользователю соответствующий внешний вид, что данные были перемещены с помощью жеста перетаскивания. Если значение равно null, то жест перетаскивания завершился без передачи каких-либо данных. Это может произойти в результате события отпускания мыши над узлом, который не является целевой точкой перетаскивания, или пользователь нажал клавишу ESC для отмены жеста перетаскивания, или целевая точка жеста сообщила об неуспешной передаче данных.

С:

JavaFX 2.0

См. также:

Сериализованная форма

  • Краткое описание полей

    Поля
    Модификатор и тип Поле и описание
    static EventType<DragEvent> ANY
    Общий супертип для всех типов событий перетаскивания.
    static EventType<DragEvent> DRAG_DONE
    Это событие возникает при перетаскивании и падении источника после того, как данные были выпущены на целевой элемент.
    static EventType<DragEvent> DRAG_DROPPED
    Это событие возникает при отпускании кнопки мыши во время перетаскивания и падения на целевой элемент.
    static EventType<DragEvent> DRAG_ENTERED
    Это событие возникает при входе события перетаскивания в узел.
    static EventType<DragEvent> DRAG_ENTERED_TARGET
    Это событие возникает при входе события перетаскивания в узел. Это событие типа bubbling, которое также доставляется всем родителям входящего узла (если оно не было обработано). Когда уведомления о входе в некоторых дочерних элементах узла нежелательны, следует использовать обработчик события DRAG_ENTERED.

    См. также:

    MouseEvent for more information about mouse entered/exited handling which is similar

    static EventType<DragEvent> DRAG_EXITED
    Это событие возникает при выходе события перетаскивания из узла.
    static EventType<DragEvent> DRAG_EXITED_TARGET
    Это событие возникает при выходе события перетаскивания из узла. Этот тип события доставляется только в выходной узел, если родители хотят отфильтровать его или получить событие bubbling, они должны использовать DRAG_EXITED_TARGET.

    См. также:

    MouseEvent for more information about mouse entered/exited handling which is similar

    static EventType<DragEvent> DRAG_OVER
    Это событие возникает при перемещении события перетаскивания внутри этого узла.
    • Поля, унаследованные от класса javafx.event.Event

      consumed, eventType, NULL_SOURCE_TARGET, target
    • Поля, унаследованные от класса java.util.EventObject

      source
  • Краткое описание конструкторов

    Конструкторы
    Конструктор и описание
    DragEvent(EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)
    Создает новое событие DragEvent с пустым источником и целевым элементом.
    DragEvent(Object source, EventTarget target, EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)
    Создает новое событие DragEvent.
  • Краткое описание методов

    Все методыМетоды экземпляраКонкретные методы
    Модификатор и тип Метод и описание
    void acceptTransferModes(TransferMode... transferModes)
    Принимает этот DragEvent, выбирая режим передачи для операции падения.
    DragEvent copyFor(Object newSource, EventTarget newTarget)
    Создаёт и возвращает копию этого события с указанным источником и целевым элементом события.
    DragEvent copyFor(Object source, EventTarget target, EventType<DragEvent> type)
    Создает копию данного события перетаскивания с заданными подставленными полями.
    DragEvent copyFor(Object source, EventTarget target, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)
    Создает копию данного события перетаскивания с заданными подставленными полями.
    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
      Это событие возникает при входе события перетаскивания в узел. Это событие типа bubbling, которое также доставляется всем родителям входящего узла (если оно не было обработано). Когда уведомления о входе в некоторых дочерних элементах узла нежелательны, следует использовать обработчик события DRAG_ENTERED.

      См. также:

      MouseEvent for more information about mouse entered/exited handling which is similar

    • DRAG_ENTERED

      public static final EventType<DragEvent> DRAG_ENTERED
      Это событие возникает при входе события перетаскивания в узел. Этот тип события доставляется только в входящий узел, если родители хотят отфильтровать его или получить событие bubbling, они должны использовать 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
      Это событие возникает при выходе события перетаскивания из узла. Это событие типа bubbling, которое также доставляется всем родителям выходящего узла (если оно не было обработано). Когда уведомления о выходе из некоторых дочерних узлов узла нежелательны, следует использовать обработчик события DRAG_EXITED.

      См. также:

      MouseEvent for more information about mouse entered/exited handling which is similar

    • DRAG_EXITED

      public static final EventType<DragEvent> DRAG_EXITED
      Это событие возникает при выходе события перетаскивания из узла. Этот тип события доставляется только в выходной узел, если родители хотят отфильтровать его или получить событие bubbling, они должны использовать 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.

      С момента:

      JavaFX 8.0

    • DragEvent

      public DragEvent(EventType<DragEvent> eventType,
                       Dragboard dragboard,
                       double x,
                       double y,
                       double screenX,
                       double screenY,
                       TransferMode transferMode,
                       Object gestureSource,
                       Object gestureTarget,
                       PickResult pickResult)
      Создает новое событие DragEvent с пустым источником и целевым элементом.

      Параметры:

      eventType - Тип события.

      С момента:

      JavaFX 8.0

  • Метод Detail

    • copyFor

      public DragEvent copyFor(Object source,
                               EventTarget target,
                               Object gestureSource,
                               Object gestureTarget,
                               EventType<DragEvent> eventType)
      Создаёт копию заданного события перетаскивания с заменой указанных полей.

      Параметры:

      source - новый источник скопированного события

      Возвращает:

      копию события с полями

      С момента:

      JavaFX 8.0

    • copyFor

      public DragEvent copyFor(Object newSource,
                               EventTarget newTarget)
      Описание скопировано из класса: Event
      Создаёт и возвращает копию этого события с указанным источником и целью события. Если источник или цель установлены в значение null, оно заменяется значением NULL_SOURCE_TARGET.

      Переопределяет:

      copyFor в классе Event

      Параметры:

      newSource - новый источник скопированного события

      Возвращает:

      копию события с новым источником и целью

    • copyFor

      public DragEvent copyFor(Object source,
                               EventTarget target,
                               EventType<DragEvent> type)
      Создаёт копию заданного события перетаскивания с заменой указанных полей.

      Параметры:

      source - новый источник скопированного события

      Возвращает:

      копию события с полями

      С момента:

      JavaFX 8.0

    • getEventType

      public EventType<DragEvent> getEventType()
      Описание скопировано из класса: Event
      Возвращает тип события этого события. Объекты одного и того же класса Event могут иметь разные типы событий. Эти типы событий дополнительно указывают, какой вид события произошёл.

      Переопределяет:

      getEventType в классе InputEvent

      Возвращает:

      тип события

    • getX

      public final double getX()
      Горизонтальная позиция события относительно начала координат источника DragEvent.

      Возвращает:

      горизонтальную позицию события относительно начала координат источника DragEvent.

    • getY

      public final double getY()
      Вертикальная позиция события относительно начала координат источника DragEvent.

      Возвращает:

      вертикальную позицию события относительно начала координат источника DragEvent.

    • getZ

      public final double getZ()
      Глубинная позиция события относительно начала координат источника MouseEvent.

      Возвращает:

      глубину позиции события относительно начала координат источника MouseEvent.

      С момента:

      JavaFX 8.0

    • getScreenX

      public final double getScreenX()
      Возвращает абсолютную горизонтальную позицию события.

      Возвращает:

      абсолютную горизонтальную позицию события

    • getScreenY

      public final double getScreenY()
      Возвращает абсолютную вертикальную позицию события.

      Возвращает:

      абсолютную вертикальную позицию события

    • getSceneX

      public final double getSceneX()
      Возвращает горизонтальную позицию события относительно начала координат Scene, содержащего источник DragEvent. Если узел не находится в Scene, тогда значение относительно boundsInParent самого корневого родителя узла DragEvent. Обратите внимание, что в 3D-сцене это представляет плоские координаты после применения проекционных преобразований.

      Возвращает:

      горизонтальную позицию события относительно начала координат Scene, содержащего источник DragEvent

    • getSceneY

      public final double getSceneY()
      Возвращает вертикальную позицию события относительно начала координат Scene, содержащего источник DragEvent. Если узел не находится в Scene, тогда значение относительно boundsInParent самого корневого родителя узла DragEvent. Обратите внимание, что в 3D-сцене это представляет плоские координаты после применения проекционных преобразований.

      Возвращает:

      вертикальную позицию события относительно начала координат Scene, содержащего источник DragEvent

    • getPickResult

      public final PickResult getPickResult()
      Возвращает информацию о выборе.

      Возвращает:

      новый объект PickResult, содержащий информацию о выборе

      С момента:

      JavaFX 8.0

    • getGestureSource

      public final Object getGestureSource()
      Объект-источник жеста перетаскивания и помещения. Источник жеста — это объект, который инициировал операцию перетаскивания. Значение null является допустимым в том случае, если жест происходит из другого приложения.
    • getGestureTarget

      public final Object getGestureTarget()
      Объект-цель жеста перетаскивания и помещения. Цель жеста — это объект, который принимает события перетаскивания. Значение null является допустимым в том случае, если жест перетаскивания был отменён или завершён без передачи или в данный момент нет целевого объекта, принимающего события перетаскивания.
    • getTransferMode

      public final TransferMode getTransferMode()
      Режим передачи данных. Перед выполнением передачи данных это — режим передачи по умолчанию, установленный системой в соответствии со входными событиями, такими как нажатие пользователем некоторых модификаторов. Во время передачи данных (в событии DRAG_DROPPED) он определяет режим передачи, принятый предыдущим обработчиком DRAG_OVER. После передачи данных (в событии DRAG_DONE) он определяет фактический режим выполненной передачи.
    • isAccepted

      public final boolean isAccepted()
      Указывает, было ли это событие принято.

      Значение по умолчанию:

      false

      См. также:

      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.
    • acceptTransferModes

      public void acceptTransferModes(TransferMode... transferModes)
      Принимает этот DragEvent, выбирая режим передачи для операции помещения. Используется для указания того, что потенциальная цель помещения, которая получает это событие, является целью помещения из обработчика события DRAG_OVER.

      Он принимает один из режимов передачи, которые передаются в этот метод и поддерживаются источником жеста. Он принимает режим передачи по умолчанию, если это возможно, в противном случае — наиболее распространённый из приемлемых режимов.

    • setDropCompleted

      public void setDropCompleted(boolean isTransferDone)
      Указывает, что обработка передачи этого DragEvent была успешно завершена в обработчике события DRAG_DROPPED. После этого вызова доступ к dragboard недоступен.

      Параметры:

      isTransferDone - true указывает, что передача была успешной.

      Исключения:

      IllegalStateException - если это не событие DRAG_DROPPED

    • isDropCompleted

      public boolean isDropCompleted()
      Указывает, был ли вызван setDropCompleted(true) для этого события.

      Возвращает:

      true, если setDropCompleted(true) был вызван

© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

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