Habilitando o redimensionamento automático de JTable somente se couber na viewport

Eu preciso criar um JTable dentro JScrollPane com colunas redimensionáveis ​​(quando o usuário aumentar a largura da coluna - barra de rolagem horizontal aparece). Para isso eu tenho usotable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);. Além disso, quando a viewport é larga o suficiente para conter toda a tabela, as colunas devem esticar para preencher a largura da viewport. Para conseguir isso eu tenho overridegetScrollableTracksViewportWidth() método da classe JTable como segue:

@Override
public boolean getScrollableTracksViewportWidth() {
    return getPreferredSize().width < getParent().getWidth();
}

Esta abordagem funciona bem, exceto uma coisa: quando eu pela primeira vez tentar redimensionar a coluna, retorne a própria largura para a posição inicial. Se eu rapidamente redimensionar coluna e soltar tabela do mouse continuar a funcionar bem. Então, qual é a razão de tal comportamento? Por que a tabela tenta redimensionar mesmo segetScrollableTracksViewportWidth()&nbsp;retorna falso? Ou, talvez, você possa propor uma solução melhor para implementar esse modo de redimensionamento?

Abaixo está um exemplo simples de trabalho do problema acima:

import javax.swing.*;

public class TestTable {
    private static Object[][] data = new Object[][] {
            { "a", "b", "c" },
            { "d", "e", "f" }
    };
    private static Object[] colNames = new Object[] { "1", "2", "3" };

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JTable table = new JTable(data, colNames) {
                    @Override
                    public boolean getScrollableTracksViewportWidth() {
                        return getPreferredSize().width < getParent().getWidth();
                    }
                };
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}