@Override
	public void dragUnderFeedback(boolean ok, DropTargetDragEvent e) {
		synchronized (root) {
			drawFeedback = true;
			cancelEditing();
			if (ok) {
				Point p = e.getLocation();
				TreePath path = getPathForLocation(p.x, p.y);
				if (path == null) {
					return;
				}
				destinationNode = (ProgramNode) path.getLastPathComponent();
				relativeMousePos = comparePointerLocation(p, destinationNode);
				int action = e.getDropAction();
				dragSourceAdapter.setFeedbackCursor(null);

				Cursor c = dragSourceAdapter.getDropOkCursor(action);
				if (relativeMousePos != 0) {
					drawFeedback = false;
					c = dragSourceAdapter.getCursor(action, relativeMousePos);
				}
				else {
					dndCellRenderer.setSelectionForDrag(plafSelectionColor);
					dndCellRenderer.setNonSelectionForDrag(nonSelectionDragColor);
				}
				dragSourceAdapter.setFeedbackCursor(c);
			}
			else {
				destinationNode = null;
				dndCellRenderer.setSelectionForDrag(Colors.ERROR);
				dndCellRenderer.setNonSelectionForDrag(Colors.ERROR);
			}
			Point p = e.getLocation();
			dndCellRenderer.setRowForFeedback(getRowForLocation(p.x, p.y));
			repaint();
		}
	}
Class to support Drag and Drop; it is also responsible for
rendering the icons, and  for editing a node name.
<p>The nodes that are used in this class are ProgramNode objects.</p>
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DragNDropTree.java