import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class JTableWidthRegression {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("JTable Regression Java 25");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            String[] cols = {"ID", "Name", "Description", "Status"};
            Object[][] data = {{1, "Mimi", "Testing Java 25 Regression", "Pending"}};
            
            DefaultTableModel model = new DefaultTableModel(data, cols);
            final JTable tab = new JTable(model);

            tab.getTableHeader().setReorderingAllowed(false);
            tab.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

            TableColumnModel columnModel = tab.getColumnModel();
            // Defined widths
            int[] widths = {30, 200, 100, 50};

            for (int i = 0; i < widths.length; i++) {
                columnModel.getColumn(i).setPreferredWidth(widths[i]);
            }

            // Note: In Java 21, the following line was NOT required.
            // In Java 25, the widths are ignored unless this is called:
            // tab.getTableHeader().setResizingColumn(null);

            frame.add(new JScrollPane(tab));
            frame.pack();
            frame.setSize(600, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

            System.out.println("Actual column widths on screen:");
            for (int i = 0; i < columnModel.getColumnCount(); i++) {
                System.out.println("Column " + i + ": " + columnModel.getColumn(i).getWidth() + "px");
            }
        });
    }
}