@Override
	public void dragOver(DropTargetDragEvent event) {
		TreePanel panel = getPanel();
		int x = panel.toHeaderView(new Point(event.getLocation())).x;
		TreeColumn overColumn = panel.overColumn(x);
		if (overColumn != null && overColumn != mColumn) {
			ArrayList<TreeColumn> columns = new ArrayList<>(panel.getColumns());
			int over = columns.indexOf(overColumn);
			int cur = columns.indexOf(mColumn);
			int midway = panel.getColumnStart(over) + overColumn.getWidth() / 2;
			if (over < cur && x < midway || over > cur && x > midway) {
				if (cur < over) {
					for (int i = cur; i < over; i++) {
						columns.set(i, columns.get(i + 1));
					}
				} else {
					for (int j = cur; j > over; j--) {
						columns.set(j, columns.get(j - 1));
					}
				}
				columns.set(over, mColumn);
				panel.restoreColumns(columns);
			}
		}
		event.acceptDrag(DnDConstants.ACTION_MOVE);
	}