|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Каждый перетащить источник (Java базировался или иначе) рекламирует набор действий, которые это поддерживает, экспортируя данные. Если это поддерживает скопированные данные, это дает объявление COPY действие; если это поддерживает данные, перемещаемые от этого, то это дает объявление MOVE действие, и так далее. Для компонентов Swing исходные действия рекламируются через getSourceActions метод.
Когда перетаскивание инициируется, пользователь имеет некоторый контроль, по которому из исходных действий выбирается для передачи посредством модификаторов клавиатуры, используемых в соединении перетащить жестом — это вызывают пользовательским действием. Например, значение по умолчанию (где никакие модификаторы не используются) обычно указывает, что действие перемещения, содержа Клавишу CTRL указывает на действие копии, и содержащий и Сдвиг и Управление указывает на соединяющееся действие. Пользовательское действие доступно через метод.
Пользовательское действие указывает на предпочтение, но в конечном счете это - цель, которая решает действие отбрасывания. Например, рассмотрите компонент, который только примет скопированные данные. И рассмотрите перетащить источник, который поддерживает и копию и перемещение. TransferHandler поскольку цель только для копии может быть кодирована, чтобы только принять данные из источника, используя метод, даже если пользователь указал на предпочтение действию перемещения.
Эта работа происходит в 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.