On Mon, 29 Jun 2026 04:54:26 GMT, Prasanta Sadhukhan <[email protected]> wrote:
> 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 ... test/jdk/javax/swing/JTable/TestAutoResizeLastColumn.java line 44: > 42: table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); > 43: > 44: table.getTableHeader().setResizingColumn(null); is this line necessary for the test? in my test app (modeled after this test) it works fine if I leave this line uncommented. I am running 25.0.2+10-69 ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/31704#discussion_r3722799125
