Spec-Zone .ru
спецификации, руководства, описания, API
|
Следующий демонстрационный пример, ChooseDropActionDemo
, содержит три списка. Как можно видеть в снимке экрана, список слева, маркированный "Перетаскивают отсюда", перетащить источник. Этот список поддерживает и перемещение и копию, но это не реализует импорт — таким образом, невозможно заскочить в это.
На правой стороне два списка, которые действуют как цели отбрасывания. Главный список, маркированное "Отбрасывание, чтобы СКОПИРОВАТЬ здесь" только позволит данным быть скопированными в это. Нижний список, маркированное "Отбрасывание, чтобы ПЕРЕМЕСТИТЬСЯ сюда" только позволит данным быть перемещенными в это. Исходный список только позволяет данным быть перетащенными от этого.
ChooseDropActionDemo
Сеть Java™ использования canImport
метод для обработчика передачи был кодирован, чтобы отклонить действие КОПИИ, но это, возможно, было реализовано, чтобы возвратить true, когда пользовательское действие будет преобладать, и копия произошла бы.Поскольку Вы могли бы предположить,
пример содержит два ChooseDropActionDemo.java
TransferHandler
реализации:
/** * The FromTransferHandler allows dragging from the list and * supports both copy and move actions. This transfer handler * does not support import. */ class FromTransferHandler extends TransferHandler { public int getSourceActions(JComponent comp) { return COPY_OR_MOVE; } private int index = 0; public Transferable createTransferable(JComponent comp) { index = dragFrom.getSelectedIndex(); if (index < 0 || index >= from.getSize()) { return null; } return new StringSelection((String)dragFrom.getSelectedValue()); } public void exportDone(JComponent comp, Transferable trans, int action) { if (action != MOVE) { return; } from.removeElementAt(index); } } /** * The ToTransferHandler has a constructor that specifies whether the * instance will support only the copy action or the move action. * This transfer handler does not support export. */ class ToTransferHandler extends TransferHandler { int action; public ToTransferHandler(int action) { this.action = action; } 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 contain the desired action - // either copy or move, depending on what was specified when // this instance was created boolean actionSupported = (action & support.getSourceDropActions()) == action; if (actionSupported) { support.setDropAction(action); return true; } // the desired action is not supported, so reject the transfer return false; } public boolean importData(TransferHandler.TransferSupport support) { // if we cannot handle the import, say so if (!canImport(support)) { return false; } // fetch the drop location JList.DropLocation dl = (JList.DropLocation)support.getDropLocation(); int index = dl.getIndex(); // fetch the data and bail if this fails String data; try { data = (String)support.getTransferable().getTransferData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException e) { return false; } catch (java.io.IOException e) { return false; } JList list = (JList)support.getComponent(); DefaultListModel model = (DefaultListModel)list.getModel(); model.insertElementAt(data, index); Rectangle rect = list.getCellBounds(index, index); list.scrollRectToVisible(rect); list.setSelectedIndex(index); list.requestFocusInWindow(); return true; } }
FromTransferHandler
, присоединенный к исходному списку, учитывает перетаскивание от списка и поддерживает и копию и действия перемещения. Если Вы попытаетесь отбросить на этот список, то отбрасывание будет отклонено потому что FromTransferHandler
не реализовал canImport
и importData
методы.
ToTransferHandler
, присоединенный и к только для перемещения и к целевому списку только для копии, содержит конструктора, который определяет, позволит ли целевой список только копию или только переместится. Экземпляр, который поддерживает действие копии, присоединен к списку только для копии и экземпляру, который поддерживает действие перемещения, присоединен к списку только для перемещения.
Вы могли бы также интересоваться Высокоуровневым примером Отбрасывания, который также иллюстрирует выбор действия отбрасывания.
Затем мы смотрим на показ расположения отбрасывания.