On Tue, 11 Aug 2026 09:34:43 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-c...
>
> Prasanta Sadhukhan has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Review comment

Looks reasonable.

-------------

Marked as reviewed by kizune (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/31704#pullrequestreview-4913667747

Reply via email to