Spec-Zone .ru
спецификации, руководства, описания, API
|
Каждый перетащить источник (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
.