Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Перетащите и Отбросьте и Передача данных
Выбор Действия Отбрасывания
Домашняя страница > Создание GUI С JFC/Swing > Перетащите и Отбросьте и Передача данных

Выбор Действия Отбрасывания

Каждый перетащить источник (Java базировался или иначе) рекламирует набор действий, которые это поддерживает, экспортируя данные. Если это поддерживает скопированные данные, это дает объявление COPY действие; если это поддерживает данные, перемещаемые от этого, то это дает объявление MOVE действие, и так далее. Для компонентов Swing исходные действия рекламируются через getSourceActions метод.

Когда перетаскивание инициируется, пользователь имеет некоторый контроль, по которому из исходных действий выбирается для передачи посредством модификаторов клавиатуры, используемых в соединении перетащить жестом — это вызывают пользовательским действием. Например, значение по умолчанию (где никакие модификаторы не используются) обычно указывает, что действие перемещения, содержа Клавишу CTRL указывает на действие копии, и содержащий и Сдвиг и Управление указывает на соединяющееся действие. Пользовательское действие доступно через getUserDropAction метод.

Пользовательское действие указывает на предпочтение, но в конечном счете это - цель, которая решает действие отбрасывания. Например, рассмотрите компонент, который только примет скопированные данные. И рассмотрите перетащить источник, который поддерживает и копию и перемещение. TransferHandler поскольку цель только для копии может быть кодирована, чтобы только принять данные из источника, используя setDropAction метод, даже если пользователь указал на предпочтение действию перемещения.

Эта работа происходит в canImport метод, где цель TransferHandler решает, принять ли входящие данные. Реализация, которая явно выбирает COPY действие, если это поддерживается источником, могло бы быть похожим на это:

public boolean canImport(TransferHandler.TransferSupport support) {
    // for the demo, we will only support drops (not clipboard paste)
    if (!support.isDrop()) {
        return false;
    }

    // we only import Strings
    if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
        return false;
    }

    // check if the source actions (a bitwise-OR of supported actions)
    // contains the COPY action
    boolean copySupported = (COPY & support.getSourceDropActions()) == COPY;
    if (copySupported) {
        support.setDropAction(COPY);
        return true;
    }

    // COPY is not supported, so reject the transfer
    return false;
}

Фрагмент кода, выведенный на экран полужирным, показывает, где поддерживаемые действия отбрасывания источника запрашиваются. Если копия поддерживается, setDropAction метод вызывается, чтобы гарантировать, что только действие копии будет иметь место, и метод возвращает true.

Затем мы будем смотреть на демонстрационный пример, который явно устанавливает использование действия отбрасывания setDropAction.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Демонстрационный пример - DropDemo
Следующая страница: Демонстрационный пример - ChooseDropAction