When JTable.setAutoResizeMode is called with JTable.AUTO_RESIZE_LAST_COLUMN, it is supposed to adjust the delta width to the last column only when table itself changes width but before JDK-8234071 fix, AUTO_RESIZE_LAST_COLUMN, was behaving exactly as if user specified AUTO_RESIZE_ALL_COLUMNS so width of all columns of table gets adjusted. JDK-8234071 fixes this issue by setting "resizingColumn" to last column when AUTO_RESIZE_LAST_COLUMN is specified so that only last column gets resized but the fix was wrongly instructing the JTable that the user is currently resizing the last column with the mouse so JTable started believing a header resize was active even during normal layout, window resizing or cell editing thus it caused side-effects like initial preferred column widths was ignored as seen in JDK-8375573 and real mouse resizing of another column was conflicting with the “last column is resizing” state as mousePressed/Released uses "resizingColumn" to ensure a certain column is getting resized and editing is disturbed because JTable thought column resizing/layout activity is happening as seen in this particular issue.
The issue is that a left click on an editable cell starts editing and then selects the cell. Selecting the cell scrolls it into view, which revalidates the table and runs doLayout(). Because the header now permanently reports a resizing column, the layout pass adjusts a column's preferred width and fires TableColumnModelListener.columnMarginChanged(). JTable.columnMarginChanged() stops the active cell editor. Also, after a user drags the first column header divider, resizingColumn is reset to null in `BasicTableHeaderUI.mouseReleased` and JTable then syncs preferred widths from actual widths using `setWidthsFromPreferredWidths(true)`. Later, when the dialog is resized, `setWidthsFromPreferredWidths(false)` runs again and all columns are recalculated so AUTO_RESIZE_LAST_COLUMN was not honoured Fix is made to handle AUTO_RESIZE_LAST_COLUMN in the layout code so the width distribution logic ensures that During normal window/dialog resize: change is made only to the last column. During initial layout: honors the user’s preferred widths, then let the last column absorbs extra space. During real header drag: allows the dragged column to resize, and uses the last column to compensate. and it doesn't hamper editing of any cell in last column when double-clicked --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - 8387267: Editor for the last column in JTable is hard to activate after AUTO_RESIZE_LAST_COLUMN was configured Changes: https://git.openjdk.org/jdk/pull/31704/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=31704&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8387267 Stats: 158 lines in 2 files changed: 139 ins; 18 del; 1 mod Patch: https://git.openjdk.org/jdk/pull/31704.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/31704/head:pull/31704 PR: https://git.openjdk.org/jdk/pull/31704
