void move() {
			if (((floatingY - y) > rowHeight / 2) && baseRow < 11) {
				// move down
				if (baseRow + 1 == model.getNumRows()) {
					model.addRow(baseRow + 1);
				}
				model.moveFactory(baseRow, baseCol, baseRow + 1, 0);
				baseRow++;
				baseCol = 0;
				reset();
				move();
			}
			else if (((y - floatingY) > rowHeight / 2) && (baseRow > 0)) {
				// move up
				model.moveFactory(baseRow, baseCol, baseRow - 1, 0);
				if (baseRow == model.getNumRows() - 1) {
					if (model.getNumFactorys(baseRow) == 0) {
						model.removeRow(baseRow);
					}
				}
				baseRow--;
				baseCol = 0;
				reset();
				move();
			}
			else { // check if we need to move left or right on this row
				int diff = floatingX - x;
				if ((diff >= 0) && (widthRightField >= 0) && (diff > widthRightField / 2)) {
					// move right
					model.moveFactory(baseRow, baseCol, baseRow, baseCol + 1);
					baseCol += 1;
					reset();
					move();
				}
				else if ((widthLeftField >= 0) && (-diff > widthLeftField / 2)) {
					// move left
					model.moveFactory(baseRow, baseCol, baseRow, baseCol - 1);
					baseCol -= 1;
					reset();
					move();
				}
			}

		}
Class for keeping track of a field that is the process of being dragged.
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/format/FieldHeaderComp.java