@Override
	public void drop(DropTargetDropEvent e) {

		Transferable t = e.getTransferable();
		int flavorIndex = -1;
		for (int i = 0; i < dropFlavors.length; i++) {
			if (t.isDataFlavorSupported(dropFlavors[i])) {
				flavorIndex = i;
				break;
			}
		}

		if (flavorIndex < 0) {
			e.rejectDrop();
			dropComponent.undoDragUnderFeedback();
			return;
		}

		int dropAction = e.getDropAction();
		int sourceActions = e.getSourceActions();

		if ((dropAction & sourceActions) == 0) {
			e.rejectDrop();
			dropComponent.undoDragUnderFeedback();
			return;
		}

		// The source listener receives this action in dragDropEnd().
		// If the action is DnDConstants.ACTION_COPY_OR_MOVE, then the source receives the MOVE.
		e.acceptDrop(e.getDropAction());
		Object data = null;

		try {
			data = t.getTransferData(dropFlavors[flavorIndex]);
		}
		catch (Throwable throwable) {
			e.dropComplete(false);
			dropComponent.undoDragUnderFeedback();
			Msg.showError(this, null, "Drop Failed", "Could not get transfer data.", throwable);
			return;
		}

		// this is the copy
		DataFlavor flavor = dropFlavors[flavorIndex];
		try {
			dropComponent.add(data, e, flavor);
			e.dropComplete(true);
			dropComponent.undoDragUnderFeedback();
		}
		catch (Throwable throwable) {
			e.dropComplete(false);
			dropComponent.undoDragUnderFeedback();
			String message = throwable.getMessage();
			Msg.showError(this, null, "Unexpected Drag and Drop Exception", message, throwable);
		}

	}
Set the data flavors acceptable to the associated drop target
@param dropFlavors the flavors
Ghidra/Framework/Docking/src/main/java/docking/dnd/DropTgtAdapter.java