> 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 ...

Prasanta Sadhukhan has updated the pull request incrementally with one 
additional commit since the last revision:

  Use state check

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/31704/files
  - new: https://git.openjdk.org/jdk/pull/31704/files/d8f087fe..faca29bb

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=31704&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=31704&range=00-01

  Stats: 4 lines in 1 file changed: 3 ins; 0 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

Reply via email to