private int[] getComputedColumnWidths(int width, int[] desiredColumnWidths) {
		int[] computedColumnWidths = new int[desiredColumnWidths.length];
		int remainingColumnCount = desiredColumnWidths.length;
		int remainingWidth = width - (hgap * (desiredColumnWidths.length - 1)); // Width of columns only, excluding gaps.
		int maximizedCount = getMaximizedCount();
		if (maximizedCount > 0) {
			int desiredMaximizedWidth = getDesiredMaximizedWidth(desiredColumnWidths);
			if (desiredMaximizedWidth >= width) {
				// Maximized will consume entire width, so divide it up among maximized.
				int remainingMaximizedWidth = width;
				int averageMaximizedWidth = remainingMaximizedWidth / maximizedCount;
				int remainingMaximizedCount = maximizedCount;
				boolean foundOne = true;
				while (foundOne) {
					foundOne = false;
					for (int i = 0; i < computedColumnWidths.length; i++) {
						if ((maximizedColumns[i] == true) && (computedColumnWidths[i] == 0)) {
							// This is a maximized that doesn't yet have a computed width.
							if (desiredColumnWidths[i] < averageMaximizedWidth) {
								computedColumnWidths[i] = desiredColumnWidths[i];
								remainingMaximizedWidth -= computedColumnWidths[i];
								remainingMaximizedCount--;
								foundOne = true;
							}
						}
					}
					averageMaximizedWidth = (remainingMaximizedCount > 0)
							? (remainingMaximizedWidth / remainingMaximizedCount)
							: 0;
				}

				// Now just divide up whatever width remains among whatever maximized columns remain.
				for (int i = 0; i < computedColumnWidths.length; i++) {
					if ((maximizedColumns[i] == true) && (computedColumnWidths[i] == 0)) {
						// This is a maximized that doesn't yet have a computed width.
						computedColumnWidths[i] = averageMaximizedWidth;
						remainingMaximizedWidth -= computedColumnWidths[i];
						remainingMaximizedCount--;
					}
				}
				return computedColumnWidths;
			}

			// Each maximized gets width it wants and the rest will be divided.
			for (int i = 0; i < desiredColumnWidths.length; i++) {
				if (maximizedColumns[i] == true) {
					computedColumnWidths[i] = desiredColumnWidths[i];
					remainingWidth -= computedColumnWidths[i];
					remainingColumnCount--;
				}
			}
		}

		int averageColumnWidth =
			(remainingColumnCount > 0) ? (remainingWidth / remainingColumnCount) : 0;
		boolean foundOne = true;
		while (foundOne) {
			foundOne = false;
			for (int i = 0; i < computedColumnWidths.length; i++) {
				if (computedColumnWidths[i] == 0) {
					if (desiredColumnWidths[i] < averageColumnWidth) {
						computedColumnWidths[i] = desiredColumnWidths[i];
						remainingWidth -= computedColumnWidths[i];
						remainingColumnCount--;
						foundOne = true;
					}
				}
			}
			averageColumnWidth =
				(remainingColumnCount > 0) ? (remainingWidth / remainingColumnCount) : 0;
		}

		// Now just divide up whatever width remains among whatever columns remain.
		for (int i = 0; i < computedColumnWidths.length; i++) {
			if (computedColumnWidths[i] == 0) {
				computedColumnWidths[i] = averageColumnWidth;
			}
		}
		return computedColumnWidths;
	}
Allows you to indicate that you want to try to keep the size of a column at the preferred 
size of the widest component in that column as the parent container component is resized. 
Any column that has been maximized won't shrink until the non-maximized windows are reduced 
to a width of zero.
@param column the number (0 based) of the column to keep maximized.
Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/MaximizeSpecificColumnGridLayout.java