@Override
	public void moveColumn(int columnIndex, int newIndex) {
		if ((columnIndex < 0) || (columnIndex >= getColumnCount()) || (newIndex < 0) ||
			(newIndex >= getColumnCount())) {
			throw new IllegalArgumentException("moveColumn() - Index out of range");
		}

		// If the column has not yet moved far enough to change positions
		// post the event anyway, the "draggedDistance" property of the
		// tableHeader will say how far the column has been dragged.
		// Here we are really trying to get the best out of an
		// API that could do with some re-thinking. We preserve backward
		// compatibility by slightly bending the meaning of these methods.
		if (columnIndex == newIndex) {
			fireColumnMoved(new TableColumnModelEvent(this, columnIndex, newIndex));
			return;
		}

		// update the visible list
		TableColumn movedColumn = visibleColumns.remove(columnIndex);
		visibleColumns.add(newIndex, movedColumn);

		// update the complete list
		completeList.remove(movedColumn);
		if (columnIndex > newIndex) { // moving up in the list

			// get the item at the index after the new index (since we are moving up, we know
			// that there are columns below the new index)
			TableColumn column = visibleColumns.get(newIndex + 1);

			// find this column in the complete list and then place the moved column before that
			// position in the complete list
			int index = completeList.indexOf(column);
			completeList.add(index, movedColumn);
		}
		else { // moving down in the list

			// get the item at the index before the new index (since we are moving down, we know
			// that there are columns above the new index)
			TableColumn column = visibleColumns.get(newIndex - 1);

			// find this column in the complete list and then place the moved column after that
			// position in the complete list
			int index = completeList.indexOf(column);
			completeList.add(index + 1, movedColumn);
		}

		// update the selection model
		boolean selected = selectionModel.isSelectedIndex(columnIndex);
		selectionModel.removeIndexInterval(columnIndex, columnIndex);
		selectionModel.insertIndexInterval(newIndex, 1, true);
		if (selected) {
			selectionModel.addSelectionInterval(newIndex, newIndex);
		}
		else {
			selectionModel.removeSelectionInterval(newIndex, newIndex);
		}

		fireColumnMoved(new TableColumnModelEvent(this, columnIndex, newIndex));
		columnModelState.saveState();
	}
This returns all columns known by this model, both visible and not seen.
@return all columns known by this model, both visible and not seen.
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableColumnModel.java