On Thu, 6 Aug 2026 03:22:02 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: > > Use state check There seems to be a problem with the fix. Using the test program https://github.com/andy-goryachev-oracle/Test/blob/main/src/goryachev/research/TestAutoResizeLastColumn.java follow the steps: - resize the first column slightly - double click on the last column - observed: the columns are resized wildly. expected: columns should not get resized. screenshots: initial state: <img width="612" height="412" alt="Screenshot 2026-08-06 at 08 07 28" src="https://github.com/user-attachments/assets/4c0d8876-a39c-420c-bde0-b74883c44ad6" /> resize slightly: <img width="612" height="412" alt="Screenshot 2026-08-06 at 08 07 32" src="https://github.com/user-attachments/assets/d941fedc-636e-4157-962e-3c0a0ba2a594" /> double click on the last column: <img width="612" height="412" alt="Screenshot 2026-08-06 at 08 07 38" src="https://github.com/user-attachments/assets/3778ff15-df9f-4128-a3a3-0866e216ff2a" /> ------------- PR Comment: https://git.openjdk.org/jdk/pull/31704#issuecomment-5206722784
